From 33b34bf5a522108ff81b7bad0baeb4d30d8b2818 Mon Sep 17 00:00:00 2001 From: Laan Tungir Date: Thu, 9 Oct 2025 10:45:04 -0400 Subject: [PATCH] Reupload --- .gitignore | 1 - HARDWARE_RNG_STATUS.md | 46 ++++ README.md | 110 ++++++++- include/otp.h | 40 ++-- nostr_chacha20.o | Bin 0 -> 4568 bytes otp-arm64 | Bin 0 -> 108584 bytes otp-x86_64 | Bin 0 -> 119016 bytes otp.o | Bin 0 -> 1480 bytes src/crypto.o | Bin 0 -> 38208 bytes src/entropy.c | 32 ++- src/entropy.o | Bin 0 -> 27160 bytes src/main.o | Bin 0 -> 12160 bytes src/pads.c | 307 ++++++++++++++++++++++-- src/pads.o | Bin 0 -> 56792 bytes src/state.o | Bin 0 -> 3048 bytes src/trng.c | 520 ++++++++++++++++++++++++++++++++++++++--- src/trng.o | Bin 0 -> 17744 bytes src/ui.o | Bin 0 -> 18128 bytes src/util.c | 14 +- src/util.o | Bin 0 -> 31952 bytes temp_device_test.c | 23 ++ test.sh | 510 ++++++++++++++++++++++++++++++++++++++-- test_swiftrng | Bin 0 -> 131312 bytes test_swiftrng_debug | Bin 0 -> 131320 bytes test_swiftrng_detailed | Bin 0 -> 131352 bytes test_truerng | Bin 0 -> 131312 bytes test_truerng.c | 55 +++++ 27 files changed, 1552 insertions(+), 106 deletions(-) create mode 100644 HARDWARE_RNG_STATUS.md create mode 100644 nostr_chacha20.o create mode 100755 otp-arm64 create mode 100755 otp-x86_64 create mode 100644 otp.o create mode 100644 src/crypto.o create mode 100644 src/entropy.o create mode 100644 src/main.o create mode 100644 src/pads.o create mode 100644 src/state.o create mode 100644 src/trng.o create mode 100644 src/ui.o create mode 100644 src/util.o create mode 100644 temp_device_test.c create mode 100755 test_swiftrng create mode 100755 test_swiftrng_debug create mode 100755 test_swiftrng_detailed create mode 100755 test_truerng create mode 100644 test_truerng.c diff --git a/.gitignore b/.gitignore index afa9d21..a12cb66 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,5 @@ Gemini.md TropicOfCancer-HenryMiller.txt .gitea_token true_rng/ -swiftrng/ # Auto-generated files (none currently) diff --git a/HARDWARE_RNG_STATUS.md b/HARDWARE_RNG_STATUS.md new file mode 100644 index 0000000..1b24fa3 --- /dev/null +++ b/HARDWARE_RNG_STATUS.md @@ -0,0 +1,46 @@ + +# Hardware RNG Implementation Status + +## Overview + +The OTP cipher application now includes comprehensive hardware Random Number Generator (RNG) device support with automatic detection, device identification, and graceful handling of different device types. + +## Supported Devices + +### ✅ Fully Supported (TrueRNG Family) +- **TrueRNG Original** (VID: 04d8, PID: f5fe) +- **TrueRNG Pro** (VID: 04d8, PID: 0aa0) +- **TrueRNG Pro V2** (VID: 04d8, PID: ebb5) + +These devices work via serial port communication and are fully integrated into the entropy collection system. + +### ⚠️ Detected but Not Supported (SwiftRNG Family) +- **SwiftRNG** (VID: 1fc9, PID: 8111) + +SwiftRNG devices are detected and identified but cannot be used via serial port communication. They require the official SwiftRNG API with libusb-1.0 integration. + +## Implementation Features + +### Device Detection +- **Automatic scanning** of `/dev/ttyUSB*` and `/dev/ttyACM*` devices +- **VID/PID identification** via sysfs to distinguish device types +- **Multi-device support** with interactive selection menus +- **Real-time status indicators** showing device availability + +### Device Communication +- **Optimized serial port configuration** for each device type +- **Timeout protection** to prevent hanging on unresponsive devices +- **Error handling** with clear diagnostic messages +- **Progress tracking** with speed estimation for large entropy collections + +### Integration Points +- **Pad enhancement** via entropy addition to existing pads +- **Interactive menus** for device selection when multiple devices are present +- **Command-line support** for automated workflows +- **Graceful fallback** to other entropy sources when no hardware RNG is available + +## Technical Implementation + +### Core Functions +- `detect_all_hardware_rng_devices()` - Scans and identifies all connected devices +- `collect_truerng_entropy_from_device()` - Collects entropy from TrueRNG devices diff --git a/README.md b/README.md index caa8387..8d94a2a 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,9 @@ One-time pads can be trivially encrypted and decrypted using pencil and paper, m - **Perfect Security**: Implements true one-time pad encryption with information-theoretic security - **Text & File Encryption**: Supports both inline text and file encryption - **Multiple Output Formats**: Binary (.otp) and ASCII armored (.otp.asc) file formats +- **Hardware RNG Support**: Direct entropy collection from TrueRNG USB devices with automatic detection - **Keyboard Entropy**: Optional keyboard entropy collection for enhanced randomness +- **Modular Architecture**: Clean separation of concerns across multiple source modules - **Short Command Flags**: Convenient single-character flags for all operations - **Automatic Versioning**: Built-in semantic versioning with automatic patch increment - **Multiple Build Options**: Standard and static linking builds @@ -169,14 +171,118 @@ These files are excluded from git (.gitignore) and regenerated on each build. ``` otp/ ├── build.sh # Build script with automatic versioning -├── Makefile # Traditional make build system -├── otp.c # Main source code +├── Makefile # Traditional make build system +├── otp.c # Legacy compatibility and global definitions ├── README.md # This file ├── .gitignore # Git ignore rules +├── include/ +│ └── otp.h # Public API header with all function prototypes +├── src/ +│ ├── main.c # Main application entry point and command line handling +│ ├── ui.c # Interactive user interface and menu system +│ ├── state.c # Global state management (pads directory, terminal dimensions) +│ ├── crypto.c # Core cryptographic operations (XOR, ChaCha20) +│ ├── pads.c # Pad management and file operations +│ ├── entropy.c # Entropy collection from various sources +│ ├── trng.c # Hardware RNG device detection and entropy collection +│ └── util.c # Utility functions and helpers ├── pads/ # OTP pad storage directory (created at runtime) └── VERSION # Plain text version (generated) ``` +## Architecture + +The OTP cipher uses a modular architecture with clean separation of concerns: + +- **main.c**: Application entry point, command line parsing, and mode selection +- **ui.c**: Interactive user interface, menus, and terminal management +- **state.c**: Global state management (pads directory, terminal dimensions, preferences) +- **crypto.c**: Core cryptographic operations (XOR encryption, ChaCha20 entropy mixing) +- **pads.c**: Pad file management, checksums, and state tracking +- **entropy.c**: Entropy collection from keyboard, dice, and other sources +- **trng.c**: Hardware RNG device detection and entropy collection from USB devices +- **util.c**: Utility functions, file operations, and helper routines + +All modules share a common header (`include/otp.h`) that defines the public API and data structures. + +## Hardware RNG Device Support + +The OTP cipher includes comprehensive support for hardware random number generators (RNGs) to enhance entropy quality for pad generation and entropy addition operations. + +### Supported Devices + +The system automatically detects and supports the following hardware RNG devices: + +| Device | VID:PID | Status | Notes | +|--------|---------|--------|-------| +| **TrueRNG** | 04d8:f5fe | ✅ Working | Original TrueRNG device | +| **TrueRNG (Alt)** | 1fc9:8111 | ✅ Working | Alternative VID/PID combination | +| **TrueRNG Pro** | 04d8:f5fe | ✅ Working | Professional version | +| **TrueRNG Pro V2** | 04d8:f5fe | ✅ Working | Latest professional version | + +### Device Detection + +The system automatically scans `/dev/ttyACM*` ports and identifies hardware RNG devices by: + +1. **USB VID/PID Detection**: Reading vendor and product IDs from sysfs +2. **Device Type Classification**: Identifying specific device variants +3. **Port Configuration**: Applying device-specific serial port settings +4. **Interactive Selection**: Presenting available devices for user selection + +### Testing Hardware Devices + +A comprehensive test script is included to verify hardware RNG functionality: + +```bash +# Run hardware device tests +./test.sh +``` + +The test script performs: +- **Device Detection**: Scans for and identifies all connected hardware RNG devices +- **Connectivity Testing**: Verifies each device can be opened and read from +- **Configuration Testing**: Validates serial port configuration for each device type +- **Entropy Quality Analysis**: Measures Shannon entropy of collected random data + +### Current Test Results + +Based on testing with actual hardware devices: + +**✅ Working Devices:** +- TrueRNG (Type 1): Full functionality confirmed +- TrueRNG Pro V2 (Type 3): Full functionality confirmed + + - Device is detected and identified correctly + - Serial port configuration may need adjustment for this device variant + +### Usage in Entropy Collection + +When generating pads or adding entropy, the system will: + +1. **Auto-detect** all connected hardware RNG devices +2. **Present a menu** of available devices if multiple are found +3. **Test connectivity** before beginning entropy collection +4. **Estimate completion time** based on device speed testing +5. **Collect entropy** with progress indicators and quality metrics + +### Device Configuration + +Each device type uses optimized serial port settings: + +- **TrueRNG devices**: 3Mbps baud rate, 8N1, no flow control +- **Automatic timeout protection**: Prevents hanging on unresponsive devices +- **Error recovery**: Graceful handling of device disconnection during operation + +### Troubleshooting + +If hardware RNG devices are not detected: + +1. **Check USB connections**: Ensure devices are properly connected +2. **Verify permissions**: User must have access to `/dev/ttyACM*` devices +3. **Check device enumeration**: Use `lsusb` to verify USB device recognition +4. **Review sysfs entries**: Ensure VID/PID information is available in `/sys/bus/usb/devices/` + + ## File Formats ### .otp File Format (Binary) diff --git a/include/otp.h b/include/otp.h index 47c0e5c..8f443e9 100644 --- a/include/otp.h +++ b/include/otp.h @@ -164,36 +164,23 @@ 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" +// Hardware RNG Device Constants (lowercase to match sysfs output) +#define TRUERNG_VID "04d8" +#define TRUERNG_ORIGINAL_PID "f5fe" +#define TRUERNG_PRO_PID "0aa0" +#define TRUERNG_PRO_V2_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 +// Hardware RNG 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; + TRUERNG_PRO_V2 = 3 +} hardware_rng_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 + hardware_rng_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; @@ -202,21 +189,26 @@ typedef struct { 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 +int find_truerng_port(char* port_path, size_t port_path_size, hardware_rng_device_type_t* device_type); // Legacy function for backward compatibility // TrueRNG entropy collection functions (updated to match implementation) +int configure_rng_serial_port(int fd, hardware_rng_device_type_t device_type); 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); +const char* get_truerng_device_name(hardware_rng_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); +// File entropy collection functions +int get_file_entropy_info(char* file_path, size_t max_path_len, size_t* file_size, int display_progress); +int collect_file_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); diff --git a/nostr_chacha20.o b/nostr_chacha20.o new file mode 100644 index 0000000000000000000000000000000000000000..9ed69116b6e492c9119c7462cb5136fde0f0e6a5 GIT binary patch literal 4568 zcmdT|Uu;uV7(cfitkaEFT+AZGG)84aXtps8A|XS#?nuBW*o3I0bX#%Dwr+H{W+QH5 zO3kh}HG9}hAAHz@(LEW0feaGJn1ll1Vd25>xCb;PTXY6u7F?X)@7!~`ySvsHebFyF z_nhzd{XO6L?&-}w)(^h!(KMz=V|&;Nr%=YS8&=j$V%fy1SS5Slf96q`n?G`MaFJX3 zqW=Q(Uzov)r=~Q)OTQ%Aq;9#LeV_r7xMVT^J6~@@n2^ zb8s$^KmqYcq^5v)hXW%kE|H^|d}xLj%tQ10O+9bv4|$ens?*qzNKl)xd=zXgO3{UG zqeFK=yJZrdU#m?%ig;GKt9;a#@}aaV9T9I_oem)6e9@3a5>dLVLfUB;*(9Z1#54I2 zx~qKHX&3RKv|VXeBJCnI`HxrI_y4SRx#{ftBRn-9q~>3s7bs64B?H^&gHXCNwt(b2g#6AQX?g`khD1^o26tMBnOm) zvVE)0((jobxv@r???PpZQn`!5NaLN5R5>MTW4j@F@CaKT;nuOmn}thE7M`k=oXzP= zxMt=WagWVlL{LMJj7!iJXNW5vyoEB4@EL5vyoEB4@ELv3F-aDN!yhbs1Hw@PB^$kLBfDx=WUD zZigk-JZp`L!zr-)(`Tu7q|mg5DZ!F2nEQvWacc~nAdi4rN)>Zb?A8h|w(%FMMUxoo zL<_8HuyIk6!C^CbhFZ(+i3}R%ped3*Xl9NR=Weu|o`w7SIAWeTbe6J!twmleo!ZDg zb5kEp4URIyXX&H&zlN%nhPO*iSidsE{ms+VQWHFl8N2>|0>Cm0vTSe%Ueumz(Gb~v? zNoLD)Px91dq{RH`MwxUW|LUoN>C5*i= zhBgS$Kknv~D$9K%)P9=@#{j*JhrS{3sb^o+dJiWJ zTecfG(Gfff@&g6=`@o47(W*-B{lx=?AVD9|0G&d+E4iNXdb_lOk8vmvy@!X=@fGeFKR_t z1C5QO{}s(3Q6rk)paJ|#c|f8zgdLOkQ#eQ>Q4g9wqyhbt5*KwKEKLLF?xrsYfc_oa zAw;4sSj2n!j6|fhJxYHKb)i<)GGN5|B1TUnxuYS{6=Rr)vtitmtTp6>2goUnM05ev~Bw_P-m z$K(&qE2I>!eM@l+kE% zg0$xNA|To+4eUA4x%jRt)FQ~P?dMf^G%PEzsV z-$`;i!Up&*8VYmj_5IEK50DXF5ob@sPrtMef^m?lpMqLwf%tCwtcveS&TWr-x!C!g z#@8Crggr5wA8eJqI=^DEVUmRbkx$0Qw;}E|w>{EypB+JL90o++*i+%@+75eyB*pA& O<^N&23YPZ5ZT}}vP4J5V literal 0 HcmV?d00001 diff --git a/otp-arm64 b/otp-arm64 new file mode 100755 index 0000000000000000000000000000000000000000..455266736eef0531d489fee6c5bd90c7c3ba9f64 GIT binary patch literal 108584 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 YI}q3UUELjwVe7PF{wfT_eLVgD1#K4qxBvhE literal 0 HcmV?d00001 diff --git a/otp-x86_64 b/otp-x86_64 new file mode 100755 index 0000000000000000000000000000000000000000..ea6e14a4d875eb2c97ac28f783e91f8f2efe280d GIT binary patch literal 119016 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 literal 0 HcmV?d00001 diff --git a/src/crypto.o b/src/crypto.o new file mode 100644 index 0000000000000000000000000000000000000000..f147e39077dcfd2a55d52259b92245125b6b334c GIT binary patch literal 38208 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 literal 0 HcmV?d00001 diff --git a/src/entropy.c b/src/entropy.c index aeb0b3c..88e38f8 100644 --- a/src/entropy.c +++ b/src/entropy.c @@ -457,20 +457,17 @@ int derive_chacha20_params(const unsigned char* entropy_data, size_t entropy_siz return 0; // Success } -// Collect entropy from binary file -int collect_file_entropy(unsigned char* entropy_buffer, size_t target_bytes, - size_t* collected_bytes, int display_progress) { +// Get file path and size information for entropy collection +int get_file_entropy_info(char* file_path, size_t max_path_len, size_t* file_size, int display_progress) { if (display_progress) { print_centered_header("File Entropy Collection", 0); printf("Load entropy from binary file (.bin format)\n"); - printf("Target: %zu bytes\n", target_bytes); } printf("Enter path to binary entropy file: "); fflush(stdout); - char file_path[512]; - if (!fgets(file_path, sizeof(file_path), stdin)) { + if (!fgets(file_path, max_path_len, stdin)) { printf("Error: Failed to read input\n"); return 1; } @@ -490,12 +487,31 @@ int collect_file_entropy(unsigned char* entropy_buffer, size_t target_bytes, return 1; } - size_t file_size = file_stat.st_size; - if (file_size == 0) { + *file_size = file_stat.st_size; + if (*file_size == 0) { printf("Error: File is empty\n"); return 1; } + if (display_progress) { + printf("✓ File found: %s\n", file_path); + printf(" Size: %zu bytes\n", *file_size); + } + + return 0; // Success +} + +// Collect entropy from binary file (legacy function for backward compatibility) +int collect_file_entropy(unsigned char* entropy_buffer, size_t target_bytes, + size_t* collected_bytes, int display_progress) { + char file_path[512]; + size_t file_size; + + // Get file path and size first + if (get_file_entropy_info(file_path, sizeof(file_path), &file_size, display_progress) != 0) { + return 1; + } + if (file_size < target_bytes) { printf("Warning: File size (%zu bytes) is smaller than target (%zu bytes)\n", file_size, target_bytes); diff --git a/src/entropy.o b/src/entropy.o new file mode 100644 index 0000000000000000000000000000000000000000..69c8fdd7d5834bd5b1f3d4a75b66639a5578b1d9 GIT binary patch literal 27160 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 literal 0 HcmV?d00001 diff --git a/src/main.o b/src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..50237eb5ed0ac08b6cac38e8e15976d2bc20818e GIT binary patch literal 12160 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 #include #include +#include #include "../include/otp.h" @@ -1021,6 +1022,61 @@ int handle_delete_pad(const char* chksum) { return 0; } +// Helper function to temporarily make pad writable and store original permissions +static int make_pad_temporarily_writable(const char* pad_path, mode_t* original_mode) { + struct stat st; + + // Get current permissions + if (stat(pad_path, &st) != 0) { + printf("Error: Cannot get pad file permissions: %s\n", strerror(errno)); + return 1; + } + + // Store original permissions + *original_mode = st.st_mode; + + // Check if already writable + if (st.st_mode & S_IWUSR) { + return 0; // Already writable, no change needed + } + + // Make writable by adding write permission for owner + mode_t new_mode = st.st_mode | S_IWUSR; + if (chmod(pad_path, new_mode) != 0) { + printf("Error: Cannot make pad file writable: %s\n", strerror(errno)); + return 1; + } + + printf("✓ Temporarily made pad writable for entropy addition\n"); + return 0; +} + +// Helper function to restore original pad permissions +static int restore_pad_permissions(const char* pad_path, mode_t original_mode) { + struct stat st; + + // Get current permissions to check if they changed + if (stat(pad_path, &st) != 0) { + printf("Warning: Cannot check current pad permissions: %s\n", strerror(errno)); + return 1; + } + + // Only restore if permissions are different from original + if (st.st_mode != original_mode) { + if (chmod(pad_path, original_mode) != 0) { + printf("Warning: Cannot restore original pad permissions: %s\n", strerror(errno)); + return 1; + } + + // Check if we restored to read-only + if (!(original_mode & S_IWUSR)) { + printf("✓ Restored pad to read-only protection\n"); + } + } + + return 0; +} + int handle_add_entropy_to_pad(const char* pad_chksum) { char header_text[128]; snprintf(header_text, sizeof(header_text), "Add Entropy to Pad: %.16s...", pad_chksum); @@ -1075,11 +1131,13 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { size_t target_bytes; + // Declare variables that may be used later + char pad_path[1024] = ""; + char state_path[1024] = ""; + // For TrueRNG, automatically use the full pad size if (entropy_source == ENTROPY_SOURCE_TRUERNG) { // Get the pad file size - char pad_path[1024]; - char state_path[1024]; get_pad_path(pad_chksum, pad_path, state_path); struct stat pad_stat; @@ -1089,17 +1147,51 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { } target_bytes = (size_t)pad_stat.st_size; - printf("\nTrueRNG selected - will enhance entire pad with hardware entropy\n"); + printf("\nHardware RNG selected - will enhance entire pad with hardware entropy\n"); printf("Pad size: %.2f GB (%zu bytes)\n", - (double)target_bytes / (1024.0 * 1024.0 * 1024.0), target_bytes); + (double)target_bytes / (1024.0 * 1024.0 * 1024.0), target_bytes); + } else if (entropy_source == ENTROPY_SOURCE_FILE) { + // Special handling for file entropy - ask for file path first + char file_path[512]; + size_t file_size; + + if (get_file_entropy_info(file_path, sizeof(file_path), &file_size, 1) != 0) { + return 1; + } + + // Get pad size for comparison + get_pad_path(pad_chksum, pad_path, state_path); + struct stat pad_stat; + if (stat(pad_path, &pad_stat) != 0) { + printf("Error: Cannot get pad file size\n"); + return 1; + } + uint64_t pad_size = pad_stat.st_size; + + printf("\nFile vs Pad Size Analysis:\n"); + printf(" Entropy file: %zu bytes\n", file_size); + printf(" Target pad: %.2f GB (%lu bytes)\n", + (double)pad_size / (1024.0 * 1024.0 * 1024.0), pad_size); + + // Smart method selection based on file size vs pad size + if (file_size >= pad_size) { + printf("✓ Using Direct XOR method (file ≥ pad size)\n"); + printf(" Method: Direct XOR - entropy file will be distributed across entire pad\n"); + target_bytes = file_size; // Use entire file + } else { + printf("✓ Using ChaCha20 method (file < pad size)\n"); + printf(" Method: ChaCha20 - entropy will be expanded to fill entire pad\n"); + target_bytes = file_size; // Use entire file, ChaCha20 will expand it + } + + printf(" Target entropy: %zu bytes\n", target_bytes); } else { // For other entropy sources, show the selection menu printf("\nEntropy collection options:\n"); printf(" 1. Recommended (2048 bytes) - Optimal security\n"); printf(" 2. Minimum (1024 bytes) - Good security\n"); - printf(" 3. Maximum (4096 bytes) - Maximum security\n"); - printf(" 4. Custom amount\n"); - printf("Enter choice (1-4): "); + printf(" 3. Custom amount\n"); + printf("Enter choice (1-3): "); char amount_input[10]; if (!fgets(amount_input, sizeof(amount_input), stdin)) { @@ -1118,10 +1210,7 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { target_bytes = 1024; break; case 3: - target_bytes = 4096; - break; - case 4: - printf("Enter custom amount (512-8192 bytes): "); + printf("Enter custom amount (512+ bytes): "); char custom_input[32]; if (!fgets(custom_input, sizeof(custom_input), stdin)) { printf("Error: Failed to read input\n"); @@ -1129,8 +1218,8 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { } size_t custom_amount = (size_t)atoi(custom_input); - if (custom_amount < 512 || custom_amount > 8192) { - printf("Error: Invalid amount. Must be between 512 and 8192 bytes.\n"); + if (custom_amount < 512) { + printf("Error: Invalid amount. Must be at least 512 bytes.\n"); return 1; } target_bytes = custom_amount; @@ -1143,11 +1232,146 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { // For TrueRNG, detect all devices and present selection menu if (entropy_source == ENTROPY_SOURCE_TRUERNG) { + // Detect available hardware RNG devices + hardware_rng_device_t devices[10]; + int num_devices_found = 0; + + if (detect_all_hardware_rng_devices(devices, 10, &num_devices_found) != 0) { + printf("Error: Failed to detect hardware RNG devices\n"); + return 1; + } + + if (num_devices_found == 0) { + printf("No hardware RNG devices found.\n"); + printf("\nSupported devices:\n"); + printf(" - TrueRNG Original (VID: %s, PID: %s)\n", TRUERNG_VID, TRUERNG_ORIGINAL_PID); + printf(" - TrueRNG Pro (VID: %s, PID: %s)\n", TRUERNG_VID, TRUERNG_PRO_PID); + printf(" - TrueRNG Pro V2 (VID: %s, PID: %s)\n", TRUERNG_VID, TRUERNG_PRO_V2_PID); + printf("\nPlease connect a TrueRNG or SwiftRNG device and try again.\n"); + return 1; + } + + // Select device interactively + hardware_rng_device_t selected_device; + if (select_hardware_rng_device_interactive(devices, num_devices_found, &selected_device) != 0) { + printf("Device selection cancelled.\n"); + return 1; + } + + // Test device speed and estimate completion time + printf("\nTesting %s connection and speed...\n", selected_device.friendly_name); + printf("Device: %s (Type: %d)\n", selected_device.port_path, selected_device.device_type); + + // Test with smaller amount (10KB) to avoid hanging on slow/unresponsive devices + const size_t test_bytes = 10 * 1024; // 10KB test (reduced from 100KB) + unsigned char* test_buffer = malloc(test_bytes); + if (!test_buffer) { + printf("Error: Cannot allocate test buffer\n"); + return 1; + } + + size_t test_collected = 0; + time_t test_start = time(NULL); + + // Use non-blocking test to avoid hanging + int test_result = collect_truerng_entropy_from_device(&selected_device, test_buffer, test_bytes, &test_collected, 0); + + time_t test_end = time(NULL); + double test_time = difftime(test_end, test_start); + + free(test_buffer); + + if (test_result != 0) { + printf("Error: Device test failed - cannot establish connection\n"); + printf("This may be due to:\n"); + printf(" - Device not properly connected\n"); + printf(" - Incorrect device type identification\n"); + printf(" - Serial port configuration issues\n"); + printf(" - Device requires different baud rate or settings\n"); + return 1; + } + + if (test_collected == 0) { + printf("Error: Device returned no data - check device connection and type\n"); + return 1; + } + + if (test_time < 1.0) { + test_time = 1.0; // Minimum 1 second to avoid division by zero + } + + // Calculate speed and estimate completion time + double bytes_per_second = test_collected / test_time; + double estimated_seconds = target_bytes / bytes_per_second; + double estimated_minutes = estimated_seconds / 60.0; + double estimated_hours = estimated_minutes / 60.0; + + printf("✓ Device test successful!\n"); + printf(" Test collected: %zu bytes in %.1f seconds\n", test_collected, test_time); + printf(" Speed: %.1f KB/s (%.1f MB/s)\n", bytes_per_second / 1024.0, bytes_per_second / (1024.0 * 1024.0)); + + printf("\nPad enhancement estimate:\n"); + printf(" Pad size: %.2f GB (%zu bytes)\n", (double)target_bytes / (1024.0 * 1024.0 * 1024.0), target_bytes); + + if (estimated_hours >= 1.0) { + printf(" Estimated time: %.1f hours\n", estimated_hours); + } else if (estimated_minutes >= 1.0) { + printf(" Estimated time: %.1f minutes\n", estimated_minutes); + } else { + printf(" Estimated time: %.1f seconds\n", estimated_seconds); + } + + // Store original permissions and make pad temporarily writable + mode_t original_mode; + if (make_pad_temporarily_writable(pad_path, &original_mode) != 0) { + // If we can't make it writable, check if it's a filesystem issue + if (access(pad_path, F_OK) == 0 && access(pad_path, W_OK) != 0) { + printf("\nError: Cannot make pad file writable: %s\n", pad_path); + printf("Reason: %s\n", strerror(errno)); + + if (errno == EROFS) { + printf("The filesystem appears to be read-only.\n"); + printf("This commonly occurs with:\n"); + printf(" - USB drives mounted read-only\n"); + printf(" - CD-ROM/DVD drives\n"); + printf(" - Network filesystems with read-only access\n"); + } else if (errno == EACCES) { + printf("Permission denied. Check file permissions.\n"); + } + + printf("\nTo fix this issue:\n"); + printf("1. Remount the drive read-write: sudo mount -o remount,rw %s\n", pad_path); + printf("2. Copy the pad to local storage, enhance it, then copy back\n"); + printf("3. Check file permissions: ls -la '%s'\n", pad_path); + } + return 1; + } + + // Ask user for confirmation + printf("\n⚠ This will modify the entire pad file and update its checksum.\n"); + printf("The process cannot be interrupted once started.\n"); + printf("\nDo you want to continue with hardware entropy enhancement? (y/N): "); + + char confirm_input[10]; + if (!fgets(confirm_input, sizeof(confirm_input), stdin)) { + printf("Error: Failed to read input\n"); + return 1; + } + + if (toupper(confirm_input[0]) != 'Y') { + printf("Hardware entropy enhancement cancelled.\n"); + return 0; + } + + printf("\nStarting hardware entropy enhancement...\n"); + // Use streaming collection with selected device - int result = collect_truerng_entropy_streaming_from_device(NULL, pad_chksum, target_bytes, 1, 1); + int result = collect_truerng_entropy_streaming_from_device(&selected_device, pad_chksum, target_bytes, 1, 1); if (result != 0) { printf("Error: TrueRNG streaming entropy collection failed\n"); + // Restore original permissions before returning + restore_pad_permissions(pad_path, original_mode); return 1; } @@ -1161,11 +1385,21 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { printf(" Old checksum: %.16s...\n", pad_chksum); printf(" New checksum: %.16s...\n", new_chksum); printf("✓ Pad files renamed to new checksum\n"); + + // Restore permissions on the new pad file + char new_pad_path[1024]; + const char* pads_dir = get_current_pads_dir(); + snprintf(new_pad_path, sizeof(new_pad_path), "%s/%s.pad", pads_dir, new_chksum); + restore_pad_permissions(new_pad_path, original_mode); } else if (checksum_result == 2) { printf("ℹ Checksum unchanged (unusual but not an error)\n"); + // Restore original permissions + restore_pad_permissions(pad_path, original_mode); } else { printf("⚠ Warning: Checksum update failed (entropy was added successfully)\n"); printf(" You may need to manually handle the checksum update\n"); + // Restore original permissions before returning + restore_pad_permissions(pad_path, original_mode); return 1; } @@ -1205,6 +1439,21 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { printf("\nProcessing entropy and modifying pad...\n"); + // Get pad path and manage permissions for traditional entropy addition + if (strlen(pad_path) == 0) { + get_pad_path(pad_chksum, pad_path, state_path); + } + + // Store original permissions and make pad temporarily writable + mode_t original_mode; + if (make_pad_temporarily_writable(pad_path, &original_mode) != 0) { + printf("Error: Cannot make pad file writable for entropy addition\n"); + // Clear entropy buffer for security + memset(entropy_buffer, 0, MAX_ENTROPY_BUFFER); + free(entropy_buffer); + return 1; + } + // Add entropy to pad result = add_entropy_to_pad(pad_chksum, entropy_buffer, collected_bytes, 1); @@ -1214,6 +1463,36 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { if (result != 0) { printf("Error: Failed to add entropy to pad\n"); + // Restore original permissions before returning + restore_pad_permissions(pad_path, original_mode); + return 1; + } + + // Update checksum after entropy addition for traditional methods + printf("\n🔄 Updating pad checksum...\n"); + char new_chksum[65]; + int checksum_result = update_pad_checksum_after_entropy(pad_chksum, new_chksum); + + if (checksum_result == 0) { + printf("✓ Pad checksum updated successfully\n"); + printf(" Old checksum: %.16s...\n", pad_chksum); + printf(" New checksum: %.16s...\n", new_chksum); + printf("✓ Pad files renamed to new checksum\n"); + + // Restore permissions on the new pad file + char new_pad_path[1024]; + const char* pads_dir = get_current_pads_dir(); + snprintf(new_pad_path, sizeof(new_pad_path), "%s/%s.pad", pads_dir, new_chksum); + restore_pad_permissions(new_pad_path, original_mode); + } else if (checksum_result == 2) { + printf("ℹ Checksum unchanged (unusual but not an error)\n"); + // Restore original permissions + restore_pad_permissions(pad_path, original_mode); + } else { + printf("⚠ Warning: Checksum update failed (entropy was added successfully)\n"); + printf(" You may need to manually handle the checksum update\n"); + // Restore original permissions before returning + restore_pad_permissions(pad_path, original_mode); return 1; } diff --git a/src/pads.o b/src/pads.o new file mode 100644 index 0000000000000000000000000000000000000000..c3c1b78d6ae9b951b8eaacd8fac2ea8748a5bb68 GIT binary patch literal 56792 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 O;|gsuW$Dr{|9=6(4yNV+ literal 0 HcmV?d00001 diff --git a/src/state.o b/src/state.o new file mode 100644 index 0000000000000000000000000000000000000000..d4aed06305801b51445a237ef50c0e4bdaf6f945 GIT binary patch literal 3048 zcmeH}L2DC16vt=VYNNIqMNp_pR1gKbG^JoEMFS;f5v@fiidf<%S)0XX6Lu%sh^azF z2vy0!g9i`2*`qf_JQReA-@$_yp$89&mrx4zz1cUL?IfiKkNRLTGr#x#Z)Rs+HhGl1 ze6d5*m^6)@XU&1?QjpsX%PJIf%{Ew(nt2T`JYJ>3; z#zM03VFNN7wH1mrYM)n8vm%tN{w2^ZD7k9Y^@ZemP0)IC2{lZegRE9=1WMRJkOJ2g zRx)#*9RKhCy%U&#M?Q>?of;b(iJhLzlpS7<#pC*rKF}X8i)nmra8Mr@Izw0-QWtzi zpGzucTfSSYALvs}|3mU0!d~jfoBr3^=s#}b|4ROo*vtGk{ru!=>F}M>#eQwH zH~@6Eed8dPr@2|x37J$o4nPaX!-b&jf~JMyrLrnG%_YheiZnD&_2c80UIPP z=c6!3OF_f>Q0*!J%yWetGA2iSinzEt7*~jM;xhgj@h1vjB>s}PxFZ~U+~k&?Www{L z9d5a1mfQENbfK8D*tEsd*|O_e4o~9?F`ctr=Cy^~b+V<3P_(2$MGM5-uw21*%$f9k zJIC`v9H6{qPv^NxJ8DH3f&xN?y59N8Ga9LMx6uwUJZxt@%Vh-1xcGFm7SzHA7HZ3<%SEX*;ds*e!By@gGk$H9q94TOVW zEcKW_Y_u(*K|TUavT)pxx*>9^v6p~%LsK4;4U;}bI@!tdlk*G=FsG`&LHdRaq+Zoy z{kOZnI&KPV$?q86A8Msu-e0@5Q8GaX{fZtK-#Pf3qw0~hJE~Rjr #include #include +#include #include "../nostr_chacha20.h" #include "../include/otp.h" @@ -35,10 +36,10 @@ int collect_truerng_entropy(unsigned char* entropy_buffer, size_t target_bytes, if (display_progress) { printf("No hardware RNG devices found.\n"); printf("\nSupported devices:\n"); - printf(" - TrueRNG/SwiftRNG (PID: %s, VID: %s)\n", TRUERNG_VID, TRUERNG_PID); - printf(" - TrueRNGpro/SwiftRNGpro (PID: %s, VID: %s)\n", TRUERNGPRO_VID, TRUERNGPRO_PID); - printf(" - TrueRNGproV2/SwiftRNGproV2 (PID: %s, VID: %s)\n", TRUERNGPROV2_VID, TRUERNGPROV2_PID); - printf("\nPlease connect a TrueRNG or SwiftRNG device and try again.\n"); + printf(" - TrueRNG Original (VID: %s, PID: %s)\n", TRUERNG_VID, TRUERNG_ORIGINAL_PID); + printf(" - TrueRNG Pro (VID: %s, PID: %s)\n", TRUERNG_VID, TRUERNG_PRO_PID); + printf(" - TrueRNG Pro V2 (VID: %s, PID: %s)\n", TRUERNG_VID, TRUERNG_PRO_V2_PID); + printf("\nPlease connect a TrueRNG device and try again.\n"); } return 1; } @@ -68,47 +69,504 @@ int collect_truerng_entropy(unsigned char* entropy_buffer, size_t target_bytes, return 0; } -// Wrapper function to match the header declaration -// Note: Full implementation moved to otp.c during modularization -// This is a placeholder that should be implemented when the full streaming -// functionality is moved to the trng module +// Streaming entropy collection directly to pad file 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) { - // For now, return an error - full implementation needs to be moved from otp.c - (void)device; // Suppress unused parameter warning - (void)pad_chksum; - (void)total_bytes; - (void)display_progress; - (void)entropy_mode; + (void)entropy_mode; // Suppress unused parameter warning + if (!device || !pad_chksum || total_bytes == 0) { + return 1; // Invalid parameters + } - fprintf(stderr, "Error: collect_truerng_entropy_streaming_from_device not yet implemented in modular version\n"); - return 1; // Error + + // Get pad file path + char pad_path[1024]; + char state_path[1024]; + get_pad_path(pad_chksum, pad_path, state_path); + + // Check if pad exists and get size + struct stat pad_stat; + if (stat(pad_path, &pad_stat) != 0) { + if (display_progress) { + printf("Error: Pad file not found: %s\n", pad_path); + } + return 1; + } + + uint64_t pad_size = pad_stat.st_size; + if (total_bytes > pad_size) { + if (display_progress) { + printf("Error: Requested entropy (%zu bytes) exceeds pad size (%lu bytes)\n", total_bytes, pad_size); + } + return 1; + } + + // Open the RNG device + int device_fd = open(device->port_path, O_RDONLY | O_NOCTTY); + if (device_fd < 0) { + if (display_progress) { + printf("Error: Cannot open RNG device %s: %s\n", device->port_path, strerror(errno)); + } + return 1; + } + + // Configure serial port for this device type + if (configure_rng_serial_port(device_fd, device->device_type) != 0) { + if (display_progress) { + printf("Error: Failed to configure serial port for %s\n", device->friendly_name); + } + close(device_fd); + return 1; + } + + // Standard delay for TrueRNG devices + usleep(100000); // 100ms + + // Open pad file for read/write + FILE* pad_file = fopen(pad_path, "r+b"); + if (!pad_file) { + if (display_progress) { + printf("Error: Cannot open pad file for modification: %s\n", pad_path); + printf("Reason: %s\n", strerror(errno)); + + // Provide additional diagnostics + if (errno == EROFS) { + printf("The filesystem appears to be read-only. Check if the drive is mounted read-only.\n"); + } else if (errno == EACCES) { + printf("Permission denied. Check file permissions and mount options.\n"); + } else if (errno == ENOENT) { + printf("File not found. The pad file may have been moved or deleted.\n"); + } else if (errno == EISDIR) { + printf("Path is a directory, not a file.\n"); + } else { + printf("This may be due to filesystem limitations or mount options.\n"); + } + + printf("\nTroubleshooting suggestions:\n"); + printf("1. Ensure the external drive is mounted read-write: mount -o remount,rw /media/teknari/OTP_01\n"); + printf("2. Check file permissions: ls -la '%s'\n", pad_path); + printf("3. Verify the drive supports the required operations\n"); + printf("4. Try copying the pad to local storage, enhancing it, then copying back\n"); + } + close(device_fd); + return 1; + } + + if (display_progress) { + printf("Streaming entropy from %s to pad...\n", device->friendly_name); + printf("Pad size: %.2f GB (%lu bytes)\n", (double)pad_size / (1024.0*1024.0*1024.0), pad_size); + printf("Enhancing entire pad with hardware entropy\n"); + } + + // Process pad in chunks + unsigned char buffer[64 * 1024]; // 64KB chunks + size_t bytes_processed = 0; + time_t start_time = time(NULL); + int error_occurred = 0; + + while (bytes_processed < total_bytes && !error_occurred) { + size_t chunk_size = sizeof(buffer); + if (total_bytes - bytes_processed < chunk_size) { + chunk_size = total_bytes - bytes_processed; + } + + // Read entropy from device + ssize_t entropy_read = read(device_fd, buffer, chunk_size); + if (entropy_read < 0) { + if (errno == EINTR) { + continue; // Interrupted, try again + } + if (display_progress) { + printf("Error: Failed to read from TrueRNG device: %s\n", strerror(errno)); + printf("Device may have been disconnected during operation.\n"); + } + error_occurred = 1; + break; + } + + if (entropy_read == 0) { + if (display_progress) { + printf("Error: TrueRNG device returned no data (device disconnected?)\n"); + } + error_occurred = 1; + break; + } + + // Read current pad data at this position + if (fseek(pad_file, bytes_processed, SEEK_SET) != 0) { + if (display_progress) { + printf("Error: Cannot seek to position %zu in pad file\n", bytes_processed); + } + error_occurred = 1; + break; + } + + unsigned char pad_data[64 * 1024]; + size_t pad_read = fread(pad_data, 1, entropy_read, pad_file); + if (pad_read != (size_t)entropy_read) { + if (display_progress) { + printf("Error: Cannot read pad data at position %zu\n", bytes_processed); + } + error_occurred = 1; + break; + } + + // XOR entropy with existing pad data + for (size_t i = 0; i < (size_t)entropy_read; i++) { + pad_data[i] ^= buffer[i]; + } + + // Seek back and write modified data + if (fseek(pad_file, bytes_processed, SEEK_SET) != 0) { + if (display_progress) { + printf("Error: Cannot seek back to position %zu in pad file\n", bytes_processed); + } + error_occurred = 1; + break; + } + + if (fwrite(pad_data, 1, entropy_read, pad_file) != (size_t)entropy_read) { + if (display_progress) { + printf("Error: Cannot write modified pad data\n"); + } + error_occurred = 1; + break; + } + + bytes_processed += entropy_read; + + // Show progress for large pads + if (display_progress && bytes_processed % (64 * 1024 * 1024) == 0) { // Every 64MB + show_progress(bytes_processed, total_bytes, start_time); + } + } + + close(device_fd); + fclose(pad_file); + + if (error_occurred) { + return 1; + } + + if (display_progress) { + show_progress(total_bytes, total_bytes, start_time); + printf("\n✓ Successfully streamed %zu bytes of hardware entropy to pad\n", bytes_processed); + } + + return 0; } // Detect all available hardware RNG devices int detect_all_hardware_rng_devices(hardware_rng_device_t* devices, int max_devices, int* num_devices_found) { *num_devices_found = 0; - // For now, return empty list - full implementation would scan /dev for TrueRNG devices - // This is a placeholder that should be implemented when the full TRNG functionality - // is moved to the trng module + // Scan /dev directory for serial devices (ttyUSB*, ttyACM*) + DIR* dev_dir = opendir("/dev"); + if (!dev_dir) { + return 1; // Error opening /dev + } - (void)devices; // Suppress unused parameter warning - (void)max_devices; + struct dirent* entry; + while ((entry = readdir(dev_dir)) != NULL && *num_devices_found < max_devices) { + // Check for serial device patterns + if (strncmp(entry->d_name, "ttyUSB", 6) == 0 || strncmp(entry->d_name, "ttyACM", 6) == 0) { + char device_path[512]; // Increased buffer size to prevent truncation + int ret = snprintf(device_path, sizeof(device_path), "/dev/%s", entry->d_name); + if (ret >= (int)sizeof(device_path)) { + continue; // Skip if path would be truncated + } - return 0; // Success but no devices found + // Check if this is a TrueRNG/SwiftRNG device by reading VID/PID + char vid[5], pid[5]; + if (read_usb_device_info(device_path, vid, pid) == 0) { + hardware_rng_device_type_t device_type = 0; + + // Check against known TrueRNG VID/PID combinations + if (strcmp(vid, TRUERNG_VID) == 0 && strcmp(pid, TRUERNG_ORIGINAL_PID) == 0) { + device_type = TRUERNG_ORIGINAL; + } else if (strcmp(vid, TRUERNG_VID) == 0 && strcmp(pid, TRUERNG_PRO_PID) == 0) { + device_type = TRUERNG_PRO; + } else if (strcmp(vid, TRUERNG_VID) == 0 && strcmp(pid, TRUERNG_PRO_V2_PID) == 0) { + device_type = TRUERNG_PRO_V2; + } + + if (device_type != 0) { + // Found a TrueRNG/SwiftRNG device + hardware_rng_device_t* device = &devices[*num_devices_found]; + + strncpy(device->port_path, device_path, sizeof(device->port_path) - 1); + device->device_type = device_type; + strncpy(device->friendly_name, get_truerng_device_name(device_type), sizeof(device->friendly_name) - 1); + + // Assume device is working if VID/PID matches (no test needed) + device->is_working = 1; + + (*num_devices_found)++; + } + } + } + } + + closedir(dev_dir); + return 0; // Success +} + +// Configure serial port for different RNG device types +int configure_rng_serial_port(int fd, hardware_rng_device_type_t device_type) { + (void)device_type; // Suppress unused parameter warning - all TrueRNG devices use same config + struct termios tty; + + if (tcgetattr(fd, &tty) != 0) { + return 1; // Error getting terminal attributes + } + + // TrueRNG configuration - traditional serial settings + // TrueRNG devices: 115200 baud, 8N1, no flow control + cfsetospeed(&tty, B115200); + cfsetispeed(&tty, B115200); + tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; // 8-bit chars + tty.c_cflag |= CLOCAL | CREAD; // ignore modem controls, enable reading + tty.c_cflag &= ~(PARENB | PARODD); // no parity + tty.c_cflag &= ~CSTOPB; // 1 stop bit + tty.c_cflag &= ~CRTSCTS; // no hardware flow control + tty.c_iflag &= ~(IXON | IXOFF | IXANY); // no software flow control + tty.c_iflag &= ~(ICANON | ECHO | ECHOE | ISIG); // raw mode + tty.c_oflag &= ~OPOST; // raw output + + // Set timeouts for TrueRNG + tty.c_cc[VMIN] = 1; // read at least 1 character + tty.c_cc[VTIME] = 10; // 1 second timeout + + if (tcsetattr(fd, TCSANOW, &tty) != 0) { + return 1; // Error setting terminal attributes + } + + // Flush any existing data + tcflush(fd, TCIOFLUSH); + + return 0; // Success } // Collect entropy from a specific TrueRNG device 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) { - // For now, return an error - full implementation needs to be moved from otp.c - (void)device; // Suppress unused parameter warning - (void)entropy_buffer; - (void)target_bytes; - (void)collected_bytes; - (void)display_progress; + if (!device || !entropy_buffer || !collected_bytes || target_bytes == 0) { + return 1; // Invalid parameters + } - fprintf(stderr, "Error: collect_truerng_entropy_from_device not yet implemented in modular version\n"); - return 1; // Error -} \ No newline at end of file + + // Open the TrueRNG device + int device_fd = open(device->port_path, O_RDONLY | O_NOCTTY); + if (device_fd < 0) { + if (display_progress) { + printf("Error: Cannot open RNG device %s: %s\n", device->port_path, strerror(errno)); + } + return 1; + } + + // Configure serial port for this device type + if (configure_rng_serial_port(device_fd, device->device_type) != 0) { + if (display_progress) { + printf("Error: Failed to configure serial port for %s\n", device->friendly_name); + } + close(device_fd); + return 1; + } + + // Standard delay for TrueRNG devices + usleep(100000); // 100ms + + if (display_progress) { + printf("Collecting %zu bytes from %s...\n", target_bytes, device->friendly_name); + } + + // Read entropy data with timeout protection + size_t total_read = 0; + time_t start_time = time(NULL); + time_t last_progress_time = start_time; + + while (total_read < target_bytes) { + // Check for overall timeout (5 minutes max for large collections) + time_t current_time = time(NULL); + if (difftime(current_time, start_time) > 300) { // 5 minutes timeout + if (display_progress) { + printf("Error: Collection timeout - device may be unresponsive\n"); + } + close(device_fd); + return 1; + } + + size_t remaining = target_bytes - total_read; + size_t chunk_size = (remaining > 4096) ? 4096 : remaining; // Read in 4KB chunks + + ssize_t bytes_read = read(device_fd, entropy_buffer + total_read, chunk_size); + if (bytes_read < 0) { + if (errno == EINTR) { + continue; // Interrupted, try again + } + if (errno == EAGAIN || errno == EWOULDBLOCK) { + // Timeout occurred, check if we have enough data for a test + if (total_read > 0 && target_bytes > 1024) { + // For testing purposes, we have enough data + break; + } + // For small collections, this is an error + if (display_progress) { + printf("Error: Device read timeout - no data received\n"); + } + close(device_fd); + return 1; + } + if (display_progress) { + printf("Error: Failed to read from TrueRNG device: %s\n", strerror(errno)); + printf("Device may have been disconnected.\n"); + } + close(device_fd); + return 1; + } + + if (bytes_read == 0) { + // End of data - this shouldn't happen for RNG devices + if (total_read == 0) { + if (display_progress) { + printf("Error: TrueRNG device returned no data (device disconnected or misconfigured?)\n"); + } + close(device_fd); + return 1; + } else { + // We have some data, might be enough for testing + break; + } + } + + total_read += bytes_read; + + // Show progress + if (display_progress && (total_read % 1024 == 0 || difftime(current_time, last_progress_time) >= 1)) { + show_progress(total_read, target_bytes, start_time); + last_progress_time = current_time; + } + } + + close(device_fd); + + if (display_progress) { + show_progress(target_bytes, target_bytes, start_time); + printf("\n✓ Successfully collected %zu bytes from TrueRNG device\n", total_read); + } + + *collected_bytes = total_read; + return 0; +} + +// Read USB device VID/PID information from sysfs +int read_usb_device_info(const char* device_path, char* vid, char* pid) { + // Extract device name from path (e.g., /dev/ttyUSB0 -> ttyUSB0) + const char* device_name = strrchr(device_path, '/'); + if (!device_name) device_name = device_path; + else device_name++; // Skip the '/' + + // Construct sysfs path for USB device info + char sysfs_path[256]; + snprintf(sysfs_path, sizeof(sysfs_path), "/sys/class/tty/%s/device/../idVendor", device_name); + + FILE* vid_file = fopen(sysfs_path, "r"); + if (!vid_file) { + return 1; // Cannot read VID + } + + if (fscanf(vid_file, "%4s", vid) != 1) { + fclose(vid_file); + return 1; // Cannot parse VID + } + fclose(vid_file); + + // Read PID + snprintf(sysfs_path, sizeof(sysfs_path), "/sys/class/tty/%s/device/../idProduct", device_name); + FILE* pid_file = fopen(sysfs_path, "r"); + if (!pid_file) { + return 1; // Cannot read PID + } + + if (fscanf(pid_file, "%4s", pid) != 1) { + fclose(pid_file); + return 1; // Cannot parse PID + } + fclose(pid_file); + + return 0; // Success +} + +// Get friendly name for hardware RNG device type +const char* get_truerng_device_name(hardware_rng_device_type_t device_type) { + switch (device_type) { + case TRUERNG_ORIGINAL: + return "TrueRNG"; + case TRUERNG_PRO: + return "TrueRNG Pro"; + case TRUERNG_PRO_V2: + return "TrueRNG Pro V2"; + default: + return "Unknown Hardware RNG Device"; + } +} + +// Test if a hardware RNG device is working by attempting to read from it +int test_hardware_rng_device(const hardware_rng_device_t* device) { + int fd = open(device->port_path, O_RDONLY | O_NONBLOCK); + if (fd < 0) { + return 1; // Cannot open device + } + + // Try to read a small amount of data + unsigned char test_buffer[16]; + ssize_t bytes_read = read(fd, test_buffer, sizeof(test_buffer)); + + close(fd); + + if (bytes_read <= 0) { + return 1; // Cannot read from device + } + + return 0; // Device appears to be working +} + +// Interactive device selection for hardware RNG +int select_hardware_rng_device_interactive(hardware_rng_device_t* devices, int num_devices, hardware_rng_device_t* selected_device) { + if (num_devices == 0) { + printf("No hardware RNG devices found.\n"); + return 1; // No devices available + } + + if (num_devices == 1) { + // Only one device, use it automatically + *selected_device = devices[0]; + printf("Using %s (%s)\n\n", devices[0].friendly_name, devices[0].port_path); + return 0; + } + + // Multiple devices - let user choose + printf("\nAvailable Hardware RNG Devices:\n"); + for (int i = 0; i < num_devices; i++) { + printf("%d. %s (%s)\n", + i + 1, + devices[i].friendly_name, + devices[i].port_path); + } + + printf("\nSelect device (1-%d): ", num_devices); + + char input[10]; + if (fgets(input, sizeof(input), stdin) == NULL) { + return 1; // Input error + } + + int choice = atoi(input); + if (choice < 1 || choice > num_devices) { + printf("Invalid selection.\n"); + return 1; + } + + *selected_device = devices[choice - 1]; + printf("Selected: %s (%s)\n", selected_device->friendly_name, selected_device->port_path); + return 0; +} diff --git a/src/trng.o b/src/trng.o new file mode 100644 index 0000000000000000000000000000000000000000..68e01a732986332bf54d764633eab1f34153ba0b GIT binary patch literal 17744 zcmcIqe{faRoj(asFd{FlXti3rDv==Jg&^GmIvRl|*Qr0U3NCfp#>ad2B~Oy~;=A{O zaT>%vUbnYz-z>A;bp3ekLsOK0d*yT~>es7umzhY20lWws8DEp?%BD$;7x7R`RX z=brQO&B?ozY27oEchCKt&-tA1`JV6jaqrEOv3u^St*H?@)ri~0yR>mUX)l>CL&2LR{rkfo=rFpcynCS#?@u6{L_PXin7dHiv+A|{TNGcH zQ0E8c{O&y&U-HsF{_cAeU-(_;7ti8igqdBC6@)h*Ie|LDt3!^eiF{oULr=}7K zeXG3Nx>CzEV4!$;^??sm2Riw?`1Om|0xt~EujpN)^_!*hOF~U3+dmAu z0{33P{s$*pD(#}CN>bf_Rms31>vRhXwcv#!SJmfp;VsPcm!J7!jh=pi)5}-TjI<|x zk9pEc{woa7MMR40V2)}#veP0r=<%xBA+!G%A{E9L1MxL^WR`I<%llkzU$l)p|E;NSV$Ve>?K7MH`^48!v zJ96{j*wqwL$9`29t+6jTtl`7wBAW)!MQFDW;#}l&hf;QA`=AbW|5e;(1}CkS;Vqpt zi3PVqMT1Fx}K)+}M94cO=iq1r4pa(<6MtNUDosn~GiL7j|k_B6@FkoN8u!*YC znlSO+MBpmhKU$eC#WpG}4A4dNezr2AGxM{~JY8GyqPIeoR4QJ~Km}bu2#YgmXz6D1 zi}c(wgM?LBNfk#wxX0&pa?`uf6jM`=ct`enCEWzwbjHSzw$ zL9$b8+kSCV(6S`1l6T&p(cELy+)!~D#K`=y7%kFh4fYad*NjBISFc8=f(=K$Ct9#i zW6T(H_)GP6LDs4PQ`to#xo`b{IO^ZX9e>(Uim__MTc`&kd{oCAZF!9xE?uJqFb!YB z#Kgo5yEvG)&@xQ|+U;pu(W6@#e2v^Hr-FM~VL;B7$j;;ECsdg0Pz|C-kE|kkv*n~5 zyGNUF`?MBi!;|5rTdW>o7jZ7Y_WuY4wLh@`Jsc=sd;!0<-@gYJbHgtc2_2${nRfj1 zi^Ej0FhCdV7mq?S*gwB1r%Z7~77t#20Gk|Y%Qb51w7D65`ID?jv7YIb+b*YhLel;* zJJ`hz3fY}0oAfJSJT*YS6Nvonv(EgOCP2A=jB1w4Z^(<%sSG9^d%q6eP;n6DL8prW z)!Z%-8%;1IkgHM{2{a%k&U{(+KU`?>g@on?Lg=9wTL)sOIg2i&QWvOT{l=ayI~Upc z5}6f@a7oyS5!)ZJ4~^DhDZpihzW8*Ip+F(PFP@-WDY#%=z}*3I6dPAnTI#1}e08dk z`Cy~B{X<$n?t%yIs9Jw$2OU7je_&G-mPEOY797g^^~lKZ^R=i7qydU2;n5}(R9aP} z_>TPj7W^8OE@rM2-h9OG+w14|m{X&?abGF67Y8V10gh_w2)u`EF30vAtff=8HqZo0 zvHgYNWqxcwGMDX`BSethaq4`KDU7}xWN0mVQfBwTKp#Y5mRe!v!`y=uM#`d#>wS;y_wBd+{65>?xX1SIeP*2>+ie&6 z_LGkbefxwr50__zHyf8dmB)a`=%j$2RXIP$UMcjwB6@Et^z9a&KDucy`G~d{+N-*& z2dm4KN?IM5W3TWbxK*m+@d+XqI%AbkEr^^z^bi~~c}SKbH%XE5F8Q2TilOsWjk1Sg z!{qOm=|>(;@JxOJbx+_ra;BDqdC{m{+DOHt?CdR1ZFE)}PDPsKI=OYRw87lLOtb5t z4y`@*lGresJB|G51M*>S)rcKge;C+Vw6_oVuw9;8i~Lz=@Pk)u90NBlB6!Q7>@SJJ zI32szWAe!k5pbzDcQT*99d(9j=%2!veUyT5nHcmKh%VR%{*9gXI#H}5>E*R8% z_ee+cy_)LBNN3o-HMS@61zIu3X6_oR*)`b}+4^!Ofmo~TNr7VZ&@08BK`o4Yy`0RG zkN()=+sHHi!0`K6_WTzI<)wc=F6Kgpg%s$)W^zYm8WvAbg~9+`M82LDP6Dw0<1#h} z=Re9|IqsK4?8vfsaz~b}vmM!1lxokNqg1yrK$pq_La))FF6}NAC4-+JWPfEq7RGD5 zt6`s{OqtWP3>pO=jJ>A=d+8$bYIWTJ>HUP4in2J|*ef-K8#^}NL}5IvztH;~zwdmZ z@B9q!Ci>lm1><~;HwVA9-lb#Ls0TbeHU@9)#&EcoVLLWkWjh~w@^1Y*_*zp6{>kvPa4|K5;Ky^G7`c8-^RgGCv>%v`A z7M<|($Fc92hEe-@-7y`r!8(2?7DN=+M2dyLf5VtRCtk8;G%d6J<(ODCuiEA9b0~Af zE*zO-m$sg@{cUIM@)L;b{~fm%|G{27Qgf{E`uL$UGyEUA(tY5B{+ z+e0j{N0mEa$E1^F?#v6+>eQE}L$Omduwz~+cItvhE;K~vtwR^b3w9}R3xhS)x2Zzx zR1L~+jUE5|P8yhy1tmDimSex3^6HqLgw)|?l-!DP?RIQBg}&2b`yA{%5Z_*XSe{2M z5JG!g-WALp^jhvxw41@V!yn+lArP=qUev%!LmU(xLSMFWTXMA{kC}0N@1w2Ox6p=Om#+;Kj1u;cU&4i)d8!q(#&GZc|74b zN!RLuikp7IL1CBbGe%4%rL#7kp%$_|PKHGg{HA?Z#UGhex+9N>bDdloK|x^z6LZqp zxh0!J^~oC9Cn9%elj&4C5%<#BOwiT?7-yXqVne4R$!;%t*=@ypdYpL9rNH0pSUD%2 zT$;^v^+v6=olatll}=e6DkO91t&Wv;p`Oo>b0&#_RYJ5mx$d;1Y|bX+aw1$F1sr^#M{tG-GCmto6I}Zak5akqbuE=_N4C+#NFZacfb7yQogw615&e9Hn~M0J_22 zgwcj+IYc@<1xI3Vf-aN&E8u#}`UK`K&1quNFu+Y+*#tV`!n5%XrwQ|;GoDEhC+#&6 zFH@=BbKD+GS*&T5dh3GW zm;Rirs7DVAiUW2M?I_~Z6^W0kT50}*xR5K4jJ#k&NK&9o_j9$4u*xQ?_N8X5aLtLX zxa&5<%kVDw9fz9cXtX(MMc1Lk~H6g_9$#rQvba%m}?Dyvv-K~YuB!}8aHmn4v@E6 zTB0kW%a*p}^4~{#8r51n=Fsa(dC~}U)dg8L!( zS3>ZA3BkV=g1;Do4}{=HLhz#@_(|a8&mQFmxyHZ`zf*XveEXr+7T^o8##9^Mg(3LO zA-M2znT}{es9m_-!!tdQc6|s9UL&-}ySm!-(WjltgPqD1J$cU!tK3f8xMGU-cGts! ztv%7Xr9FkMF|<-}?!pmuO7#xMYsYa7e_p46k_SO2m&;_^={!$oOrSX+*#2?W4Ne@= z(%><)ogPC)-tBUn9+9HwS&^bsq)5?ONu=b-P~eGZTYFC~+kvB%D^iKBtm_CO<6(^S zGl}jV;bwYpg7#8^YPRRy&8my-=}an1EJ-4APp=@mwNC?|wP)hpj;u?fvI)v~2~gvn z2MC6FS+@s|=s`XmB|3BPN!raOR;_AJxrultCGZl% zt2S;TI8an8LND;F7ssm*94lQfnTDfanJeO67K{DEh&@VlCZJsi|4ATIhCn2QnLI0K ze5*tQK7DJ~_`fP#^PAND^CA5282nGEd-_mJiR|I}g9IXJ{r2Ei{779jo>cd=KTy(m zS8yv{S69-@iKJ6Ej=wBEpnf)DMIGts5oV;b|B-K5w zi?z%@!p(N+ zBQzz=pQ&`Whwz_eI2~cMod+3CM>CBNF+9TXpDJ9pdyi`OG~@GeoJWQu(S`OKt-oC1 zTE|m5cQ8KJxrgB&W;%~BoQ@J&KV#^BUFr8S{^g9n*Wm9}{FfM?+jEfNQ~bto?zdxx z{z;{OlJU9zFBs1C-!^pKR64(Bd>+sGs87XQXP$Zlpz1Vq>(uyNsc_nt&J zb}F4)7@zB`W;oZe4V_n%P8;KMolhJ5Hx)k~!tXTrjmlp=A^dFyU&r5*A^cqiU&qte z7@v>ta|ZvovS%;j^ZtI<;Lla}{~p30W;mZO?;1LvQTH>bF(fjB+j*bcNtDcT8+;oqmjsd9#=Po;LQx@^K_NMb$^em ze%;0Rl-2FtYw%|(`!+H@@7H#Nf1BceF@*nJhF{6rJ!a^9Ug?}$5BVy-^cI;4F8&;lSCP%J&b=H z?zPSVgRjrk{}IA}!{BTEw?p_d=um~E{h-g)^At{g;Px~be69b<5dPf;e~=nO+7QA& z%y0`l?T4Q;{CbAhs`pD|C+B~X;WsdT7sGF4c#+{e4qsyULdHMA@CJsTVfal9Z=*#P ziR@g2Ki#iK8Q#e70>imIuQQyQ(mL-joU$5!pW%Gnj?fK~9(R2%y;k95Cxy7yxsBoc zT>7w~qtB%sjL&r*V>n-DiVWxH(&r5Q-D=)_hw-`o4;aq(!IL5QI}BgU`a4^_?9u+2 zsn(Gz4g3{l&jN*$-}rjl$Z+1@EW`P}TwpjK$A1jLp9#T#sBmrnd1dD@#^-kal;PaY zvkd3<{GQ?DLLDbFs4|jnSDy#!6>i4WM-6_H+83{5d~WArhErCz`+%XdLFqiq_*^H+ zaIW(;hVyuMUg5f5b5%SXWqiI5{+8jC)pmZEf*Xna!1>oHT~CUx9_K}d-wZ9S zf5gx^rF2d(KHsO_F!-0yVuSQH*)qb+j*(twMzHyXE>Rz+r3}m+Hb2> zzcv~88imIV{62+0YT%z$__GQpd-%RE#BjdO{1?M{e4b}GNo)ICs4|kazbUvCs}xS{ z^7-|W!S7Xe9$|bQ&;M=k|4#9L#`s+SQ*@X{()N5?@i!@)?BV)72LFKK_l59xGJX_V z+7JDV-^}oR3}43ZVWvZm+&@w6jxav&SB@SwkaWL(srXMS-0auW3@56#(;^Wh(xE?{ zT2)5l`g`Fc2Clzf?l5ruJ?|L<*WW1z4P1Y(8Z~hJ{Ry97WYYHN?=hBv>+dll>h^Yf z@y)n;x!~HVb2+Cg9`*3QQzAsphiEMW_zOslY{=v?P;#>Pt`GG{; zcVzNWe2BpRGeJlfY5e-&POnG0Oxv%oYfzx`nnTxxH}Jd3yvcn4MYNun_BX2f z)?`(gGwpvAC~2DYZB<`?AJ8&peTu?rK)xYmaotmzkGj)?{XO<_!>( zRvD%`jyWe<^|)QMthHO#bt~H{D3TDsL$a-{VGp`&o83*%5lu*hh`O?4C2M5c;VUGg&m%~?U}bS9g^JQ&-%`W{Iea|_81BN%V9S2LVsp!XD0cYKee?} zc(zx-WT~yM3HxS$^BA1YpXtcY?avbCNSDWq@9osqwD?)kp6_ny4K6dk^v;Ujxs zWY2uxr}v)B8`oddGQ^?Auuu;1nKaj*y#$3rluxyxm&hG{2=3*1gC(~`y1(xMpn3NA zPI=nemG2((z2|B3y_f1;nmRjm)A|e~&D69bR?e6mUF?6--|Wm()OG9m9x1PXzH^%E zoXVZkwc4z5(*8>{w54ys`Sa)f+4Y!HQ)Rvm%c;C)+L$tAVZK)r{eN?tPt}(1@GQSe z3rb#%LQ3X!$;-=!Yp9(i#_zeVz5g=UAN)s8rh1C}7abz_&>7Di?Polb zzY24UGoHUZc*Zluw+lw^s`Yy!kRgJCrZ&`{l)Z4Y{r3;VCJONd-79B& z1$Etrhny;G(K||I(z`!6f4(EV1CCO;R4W3)p5o8SF4DGtf_#KKEsz!Ie}$=rt>war@#JWnS&ksJGwGc$KGllHB2W5$(Eb&)^K;$O2?PA8Ry?^G zT87hQ(@1fWo%Y`J^ElY)Aw{wh?E7dGx(~G}_N0%&%}8CNrBoqLb)zEsu2wEhc z6eap2dAAkv#2+wUXe9F~h1wwCx#bJRK`AN9y_DC-*{w#w1S3nimoXZtRy?_-+#bl? zyy=?fFMONVE4SmO-@&+yEMvYQXO<&)#yr;U+0&j$KMR6Vt#}mn9DnoU7yxw6CzxMH zRUq30E*M_+^j|k}uD`i?@Z+4+eU7Z(kS-|aBc~Tguejx|UHCCjgSz7IOu8L3&o-ka z{_Nv;<8OXRT9Zx7_~h33E=d^zX444vPt_tM^Weg}{mSMYGetX0cK?8w3{FZ-oGDh` z(w#gFK*g7Q4CKQ-xEGh969gw&T$kY^$O5Oph{DSdI*8!eBeu7D(m#d_ainGr;?Q5P zJtXsn?142?ct4sUr)$PBIP@hLijO0ICKuo%>C-eN^bXev9^#mJa%_R#Ou83kXXWV# zRMA`9xt}Mg$B~35lvF{IRBAYymmMOwS=J296wKsT^M*RPnlltL`GC_4B=<}%?8twY z+gVNmYML*P`d(F=9e8rzbh(M^y219I9*v&wNTU|O!OOFB*__5K-8Xof5JMh$sI*KK zIf_k*PC#pvZ?LpdNKsd9hnS%6X8o(FKj%%D%a7j7IZeuA{z^OEbn5ZEwOByTV95{O z9G3i#!b?VO!XpRJT$!kSk2u?%TrrTFY}fasP1)B>2LCaV^|+H_c>0pb+T}>X)Bj_# z7T$KRXSt5qlaJjO*+co>32*-T>*D9VnWP6#z4HlW(DLjjFKCm%Nxdb zNA~RR1u^jK$CKN;%3Smo(qI$AQ{G#d^xGVFO028`FZ46tK=SEcZgE-RAYmZ!Pbj zQ6np(#yk58j-Wje3vX3Mbpj0U9H_ZdMj;JyY(!<$$heq9|C5vI{&*?8VppOzI6RX+ z4)bN3QCBFG@CFMdd6$+EQ2Tc#{rYe)tH46J3Cn82nz)rn7`}*Y#SJ@Z1fvl<97$SU zuU9Nsu)ruu7;u^(@B-*!!sj=!JQ@wvG+9?8e??@Y*$@sH!TM-8XnBn_4VIa(3_IRr zn0012;ziOQp{)Yh#wsh4G|G){u3KYltnl98t(+%}>37a;TsQsBibiX*ZCH_DyeVco z=rTmZ4c1U}spK-+8U)NxLKr@jwONj`#e}t1gB7%mXv_{rBh`jjZbhuPXYm>3Y z3^_(Rj*gijBN5(W8Ku@{voY3SC8~|e<%{PSH?G4&Wz{M;RaMNrxeNsP;_+y_+E`|S zZXt|O+=AiZNGu7nQZM;gO0A8?8%>)u2uJFS5^q(lv3#)s6GLQS{j84KR<*GnLNRMm zCl^|$=mU@NHaiX!*v`w*S zBdBTCfEQt^M72;}L4!-9aU)hZ+sZ&6IlwS!yw}J%(8MmIHXKjb-khIR=s*L*Zi-pe z!l?8b>oBN|prl!638TtuECZi`f>L3bfktU%c@=tL5C&0pbFR;ao;SW&vvDBm%fVDh4Wo1=1~cy%7q>Ay*ojq>dN_+0|%9K<~J~ zHL=WWXu!bLn8CX-4$zl08<+@;SQ9!QZIj86?_^1XQ_d<$%rYWT8!SpjLI#)xYU6zk z#1(Q0w^QW~vRm51?3VW~cB`S$qzxH~UW44LrX`KWFAhgcSns9Ys2wYV^@vGe#Wz|B zrLh%n3?~xcvxJZiS+sV^iWLssYbJs?#D>6@C(K&#l#|;f36zH2!nqXRRP%$y5wj5z zLN;0#+WrIH1GiP8FRHv^ZKD~tjir{e%H=r6ugYRrb|FY^qcmnFU_m?jneoPGylhV1 z>vK?=mf$t<=q43j$OLF=F)xWG8$vQB4Q4VDtaqg35`auY8-+LIC}xF3Ikv^VLEL?b=1leG-*g3$aA)->_s7u#wjpcD+R_0(Kh+|E4e`pd8{`y>ytEvTA3NLVY;J z3fy+2;*i17x(IAyA;U~?pP(C@O+T0LUT5K`ghDxPe!xH*Rw!&o<4D7O!GSPfFjYC` zE-X1TEuW8q=c^p&9J&^XQ=Ok`X&;R91TDdMnB+lk&FmyH!=*in(P9mP7Cb z1nN?O1+yxL9WnS4PqwM*T(srSMbYNTMbjsa8{Yzj#ub3$2iq1r_$E#Me({p8 zjxGLcU^so>Kpfibz|ZxM@)sci$8Nw*Xrp+4@wwdid!26aD4uijGr9g9s(%9?KWc4G z{(jYe3XP-jqfU&W`MXvB(jooxbN!#H{u_qKzb+^L3dEu90H@{U|DaeZD0_w?-(RJoQ!rKp`Ce#8wDj4LHgtxiW@;9R&jl z@$qqA2*29}$80ae$N383+g$J`T=1t{@ZEr;UB6PXleq`jK^H!}*h>CyFvieiF2eau z_!QFfcP{wvUGP4@QJ+&DxPT^e4bGpz2l1d*Ugm;Vy5Kjv;0s;wRWA5?7kq;Y9(2KDF1SdBy+IL#Iiq~^Oeg+q2dXbNhYK|8$B3N%JT z7K%xTM16Eqpb=i30$Bg!gyD#&h2aTdN0YG_C;_hnp#}@YZMFmI0ZbS^?sZJnE{;4k z7OMHg5TH)ID$%U*U?LU~F*Ba90{B7$?g59?fgR2(RRAQ=q)G=hR94^E9bg8E+PGy2 z(~gD(u~B{DlwJX;HkDpxFbJ;?A`y`xsFkh@S+!=e!FGr-6TF8G#bH=z2C$$CC{Aty z?9I^WB6qZe}LhaGrUFN zc)~|N+4UsjbG!at<8Od5*nZ~1?_@Y%N8JqPaqrdSA9KWuLB@yIhMc|U7|!JssX7L` z@p3@Pxk%v{UvAfAjbE(tW10*9Dvdu)@n^a4y&9j^+dLQk0*!x@lJ9fjuhjTH#s4MtCC|dKA(4k#y^G+6KF{d$2t<*HYSJr zC!_H{RDAqnI5s@-d7okUmC#4}?_oG!cRdW}aUW1P*?XH>S06GykNYPYf2HD&Qm>%c z&GnqBaFUPpCAKRyoa9`~*yWE=j({x!}NHKQ~8Vd4Cd$A z3P<%&&PPhm8#R2QT5k)O9D~VOukmLq{&yIk$Lk)3U&G|IFr4SZ3!408O8#EP=knV$ zen9b$xbT0i@$XUmH(mJM8lU3Z$M`(HgN)DPI~o@=G>i+6?_`BjTxg%1#`xUcN`~|J zuF>SQD7)@p{FyK}t;afz|Cr)O8K2L)QRDAd{1oGJKRm?v+z(GPKKH|OjE|zp4?kyo zuFo$uK0PnqWPJX-ct_)t{vR+t*Z&;jbNwgbW(rM@uHTo`@k*@AB_e=+s)({a8L7gYW!;yzl-s?y}#G^w<><0 z3x81K({uW)3;(>ve^|*MhsHz0TdvO}g;Ts}T~B9x?zb6?&+}m(n8dfW|+d_(xs%rx`wr$(g9WevtC8b9(~}FJp3ShV$n_N|WEM^vN#{p22oUkAF9U5_(- zCc}4X@~Ljy#rRyGE{4x$a!zP+9#MWCWPJQ?fb4p^{(i z!e8aWzr%&Uh2i}BnHEjXkJP+>%lPG>E7|o5!}+>oH^^6~3cm=~BV0b0NpI|um+Y1V(d0$ua?qz(ge<#Da zoIZw^vw1&OILY@=eTHAULDTbRlERVC*Xaz#=j-%VhF8HD^5?f0Uc&IL4Cm|OQH7J9 zl;=+|{v0M}w+sJO7k;F&eugs zlSAtw%lLd-*EKG$=L#^0g%+g$iR)c904KC9vM{`fqTV=z5m z)A;oM_&VcrJqH+m4U7|#8FyTZx;hm{|`&G_8^QH@XUS(_Mt zCew49#;51zLyXVu-NkUeZ?tN1sLuZ-<6|jDd38eLQ@l=VIMw+dGdTv6<3Z)1k$J!i9g6#-}>}HW&UfjZby{Y8U=`jZbxc4dZjag&Cjk|63WK@BbOb z=XKg6jE|QTm**HhgWhD@1K5+ zPy6Q@#^-iD$Z%fIKgDpqPWLjLuhZ?)D#tFg?R$8D_Mmf;_9FCCg+Hv}_bI$Z!(UMN zV;cSog+Hm`dlkMz!|~r>uRXP)vZ{l z;q-f@yEL4B?{lAq)9-qAYWQ8aSfRDcW8QE3ap6Ggk;gnvzsG@}=E#O>SUWvw|4ibzu!Y>zW;f0^KT3+}8 zU%C8cg}SecB)u{CowF6Uo76z7K2RHnzv4Sue)*#TBG5GTSj-7rsIFSoI;IZg2D%l~ z;R;>4Fo!r7UHCAEHi!gh6XAnn$Kwq&`a3r6VTh}6VV7*5Y4Z}U&p!t`Q05mMKM%&D zOpNuAh7Sj5J(^=kf2UW7O1LOwfBS6?al8c+7$3K&u<;KN%F{xKLD+Q%E& zPv_;(N!Oe=QTd%?c&&541sLwny8V;Ycmw))BmD`B!Uf9I$5*KFH)|8>d_name, ".pad") && strlen(entry->d_name) == 68) { // Found a pad file - construct full absolute path - if (current_pads_dir[0] == '/') { + const char* pads_dir = get_current_pads_dir(); + if (pads_dir[0] == '/') { // Already absolute path - int ret = snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s", current_pads_dir, entry->d_name); + int ret = snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s", pads_dir, entry->d_name); if (ret >= (int)sizeof(first_pad_path)) { // Path was truncated, skip this entry continue; @@ -375,14 +375,14 @@ int load_preferences(void) { // Relative path - make it absolute char current_dir[512]; if (getcwd(current_dir, sizeof(current_dir))) { - int ret = snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s/%s", current_dir, current_pads_dir, entry->d_name); + int ret = snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s/%s", current_dir, pads_dir, entry->d_name); if (ret >= (int)sizeof(first_pad_path)) { // Path was truncated, skip this entry continue; } } else { // Fallback to relative path - int ret = snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s", current_pads_dir, entry->d_name); + int ret = snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s", pads_dir, entry->d_name); if (ret >= (int)sizeof(first_pad_path)) { // Path was truncated, skip this entry continue; @@ -641,7 +641,7 @@ void get_directory_display(const char* file_path, char* result, size_t result_si } // Current working directory - if (strcmp(dir_path, ".") == 0 || strcmp(dir_path, current_pads_dir) == 0) { + if (strcmp(dir_path, ".") == 0 || strcmp(dir_path, get_current_pads_dir()) == 0) { strncpy(result, "pads", result_size - 1); result[result_size - 1] = '\0'; return; diff --git a/src/util.o b/src/util.o new file mode 100644 index 0000000000000000000000000000000000000000..2f27daf5114208daa367bd8ebbaefbb04930f12f GIT binary patch literal 31952 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 literal 0 HcmV?d00001 diff --git a/temp_device_test.c b/temp_device_test.c new file mode 100644 index 0000000..cdb83bd --- /dev/null +++ b/temp_device_test.c @@ -0,0 +1,23 @@ +#include +#include +#include "include/otp.h" + +int main(int argc, char* argv[]) { + (void)argc; (void)argv; + + hardware_rng_device_t devices[10]; + int num_devices_found = 0; + + if (detect_all_hardware_rng_devices(devices, 10, &num_devices_found) != 0) { + printf("ERROR: Device detection failed\n"); + return 1; + } + + printf("DEVICES_FOUND:%d\n", num_devices_found); + + for (int i = 0; i < num_devices_found; i++) { + printf("DEVICE:%d:%s:%d:%s\n", i, devices[i].port_path, devices[i].device_type, devices[i].friendly_name); + } + + return 0; +} \ No newline at end of file diff --git a/test.sh b/test.sh index 5b8c609..450e482 100755 --- a/test.sh +++ b/test.sh @@ -1,27 +1,499 @@ #!/bin/bash -echo "Testing OTP Cipher Implementation" -echo "=================================" +# Hardware RNG Device Testing Script +# Tests all three detected hardware RNG devices for functionality +# Author: OTP Cipher Implementation +# Version: 1.0 -# Test 1: Generate a pad -echo "Test 1: Generating pad..." -./otp generate test 2 +set -e # Exit on any error + +echo "========================================================================" +echo "Hardware RNG Device Testing Script - OTP Cipher v0.3.16" +echo "========================================================================" echo -# Test 2: Check if files were created -echo "Test 2: Checking generated files..." -ls -la test.pad test.state -echo +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color -# Test 3: Test encryption -echo "Test 3: Testing encryption..." -echo "Secret Message" | ./otp encrypt test > encrypted_output.txt -cat encrypted_output.txt -echo +# Test counters +TOTAL_TESTS=0 +PASSED_TESTS=0 +FAILED_TESTS=0 -# Test 4: Test decryption -echo "Test 4: Testing decryption..." -cat encrypted_output.txt | ./otp decrypt test -echo +# Function to print test results +print_result() { + local test_name="$1" + local result="$2" + local details="$3" + + TOTAL_TESTS=$((TOTAL_TESTS + 1)) + + if [ "$result" = "PASS" ]; then + echo -e "${GREEN}✓ PASS${NC}: $test_name" + PASSED_TESTS=$((PASSED_TESTS + 1)) + elif [ "$result" = "FAIL" ]; then + echo -e "${RED}✗ FAIL${NC}: $test_name" + FAILED_TESTS=$((FAILED_TESTS + 1)) + if [ -n "$details" ]; then + echo -e " ${RED}Error:${NC} $details" + fi + elif [ "$result" = "SKIP" ]; then + echo -e "${YELLOW}⚠ SKIP${NC}: $test_name" + if [ -n "$details" ]; then + echo -e " ${YELLOW}Reason:${NC} $details" + fi + fi +} -echo "Tests completed!" +# Function to test device detection +test_device_detection() { + echo -e "${BLUE}=== Device Detection Tests ===${NC}" + echo + + # Test 1: Check if devices are detected + echo "Scanning for hardware RNG devices..." + + # Create a temporary test program to check device detection + cat > temp_device_test.c << 'EOF' +#include +#include +#include "include/otp.h" + +int main(int argc, char* argv[]) { + (void)argc; (void)argv; // Suppress unused parameter warnings + + hardware_rng_device_t devices[10]; + int num_devices_found = 0; + + if (detect_all_hardware_rng_devices(devices, 10, &num_devices_found) != 0) { + printf("ERROR: Device detection failed\n"); + return 1; + } + + printf("DEVICES_FOUND:%d\n", num_devices_found); + + for (int i = 0; i < num_devices_found; i++) { + printf("DEVICE:%d:%s:%d:%s\n", i, devices[i].port_path, devices[i].device_type, devices[i].friendly_name); + } + + return 0; +} +EOF + + # Compile the test program + if gcc -Wall -Wextra -std=c99 -Iinclude -o temp_device_test temp_device_test.c src/trng.o src/util.o src/state.o src/pads.o src/crypto.o src/entropy.o src/ui.o nostr_chacha20.o -lm 2>/dev/null; then + # Run device detection + DEVICE_OUTPUT=$(./temp_device_test 2>/dev/null) + DEVICE_COUNT=$(echo "$DEVICE_OUTPUT" | grep "DEVICES_FOUND:" | cut -d: -f2) + + if [ "$DEVICE_COUNT" -gt 0 ]; then + print_result "Hardware RNG device detection" "PASS" "Found $DEVICE_COUNT devices" + + # Parse device information + echo "$DEVICE_OUTPUT" | grep "DEVICE:" | while IFS=: read -r prefix index port_path device_type friendly_name; do + echo " Device $index: $friendly_name at $port_path (Type: $device_type)" + done + echo + + # Store device info for later tests + echo "$DEVICE_OUTPUT" > temp_devices.txt + else + print_result "Hardware RNG device detection" "FAIL" "No devices found" + echo " Expected devices: TrueRNG, SwiftRNG variants" + echo " Check USB connections and device permissions" + echo + fi + + # Clean up + rm -f temp_device_test temp_device_test.c + else + print_result "Device detection compilation" "FAIL" "Could not compile test program" + fi +} + +# Function to test individual device connectivity +test_device_connectivity() { + echo -e "${BLUE}=== Device Connectivity Tests ===${NC}" + echo + + if [ ! -f temp_devices.txt ]; then + print_result "Device connectivity tests" "SKIP" "No devices detected in previous test" + return + fi + + DEVICE_COUNT=$(grep "DEVICES_FOUND:" temp_devices.txt | cut -d: -f2) + + if [ "$DEVICE_COUNT" -eq 0 ]; then + print_result "Device connectivity tests" "SKIP" "No devices available for testing" + return + fi + + # Test each detected device + grep "DEVICE:" temp_devices.txt | while IFS=: read -r prefix index port_path device_type friendly_name; do + echo "Testing device: $friendly_name at $port_path" + + # Create device-specific test + cat > temp_connectivity_test.c << 'EOF' +#include +#include +#include +#include +#include "include/otp.h" + +int main(int argc, char* argv[]) { + if (argc != 4) { + printf("Usage: %s \n", argv[0]); + return 1; + } + + hardware_rng_device_t device; + snprintf(device.port_path, sizeof(device.port_path), "%s", argv[1]); + device.device_type = atoi(argv[2]); + snprintf(device.friendly_name, sizeof(device.friendly_name), "%s", argv[3]); + device.is_working = 0; + + // Test with small buffer (1KB) and short timeout + const size_t test_bytes = 1024; + unsigned char* test_buffer = malloc(test_bytes); + if (!test_buffer) { + printf("ERROR: Cannot allocate test buffer\n"); + return 1; + } + + size_t collected = 0; + time_t start_time = time(NULL); + + printf("TESTING:%s\n", device.friendly_name); + + // Test device connectivity with timeout + int result = collect_truerng_entropy_from_device(&device, test_buffer, test_bytes, &collected, 0); + + time_t end_time = time(NULL); + double test_duration = difftime(end_time, start_time); + + if (result == 0 && collected > 0) { + double speed_kbps = (collected / 1024.0) / (test_duration > 0 ? test_duration : 1.0); + printf("SUCCESS:%zu:%0.2f:%0.2f\n", collected, test_duration, speed_kbps); + } else { + printf("FAILED:%d:%zu:%0.2f\n", result, collected, test_duration); + } + + free(test_buffer); + return 0; +} +EOF + + # Compile and run connectivity test + if gcc -Wall -Wextra -std=c99 -Iinclude -o temp_connectivity_test temp_connectivity_test.c src/trng.o src/util.o src/state.o src/pads.o src/crypto.o src/entropy.o src/ui.o nostr_chacha20.o -lm 2>/dev/null; then + + # Run test with timeout to prevent hanging + CONNECTIVITY_OUTPUT=$(timeout 30s ./temp_connectivity_test "$port_path" "$device_type" "$friendly_name" 2>/dev/null || echo "TIMEOUT") + + if echo "$CONNECTIVITY_OUTPUT" | grep -q "SUCCESS:"; then + # Parse success output + SUCCESS_LINE=$(echo "$CONNECTIVITY_OUTPUT" | grep "SUCCESS:") + COLLECTED=$(echo "$SUCCESS_LINE" | cut -d: -f2) + DURATION=$(echo "$SUCCESS_LINE" | cut -d: -f3) + SPEED=$(echo "$SUCCESS_LINE" | cut -d: -f4) + + print_result "Device connectivity: $friendly_name" "PASS" "Collected ${COLLECTED} bytes in ${DURATION}s (${SPEED} KB/s)" + + elif echo "$CONNECTIVITY_OUTPUT" | grep -q "FAILED:"; then + # Parse failure output + FAILED_LINE=$(echo "$CONNECTIVITY_OUTPUT" | grep "FAILED:") + ERROR_CODE=$(echo "$FAILED_LINE" | cut -d: -f2) + COLLECTED=$(echo "$FAILED_LINE" | cut -d: -f3) + + print_result "Device connectivity: $friendly_name" "FAIL" "Error code $ERROR_CODE, collected $COLLECTED bytes" + + elif echo "$CONNECTIVITY_OUTPUT" | grep -q "TIMEOUT"; then + print_result "Device connectivity: $friendly_name" "FAIL" "Test timed out after 30 seconds" + + else + print_result "Device connectivity: $friendly_name" "FAIL" "Unexpected test output" + fi + + else + print_result "Device connectivity test compilation: $friendly_name" "FAIL" "Could not compile test program" + fi + + echo + done + + # Clean up + rm -f temp_connectivity_test temp_connectivity_test.c +} + +# Function to test device configuration +test_device_configuration() { + echo -e "${BLUE}=== Device Configuration Tests ===${NC}" + echo + + if [ ! -f temp_devices.txt ]; then + print_result "Device configuration tests" "SKIP" "No devices detected" + return + fi + + # Test serial port configuration for each device type + grep "DEVICE:" temp_devices.txt | while IFS=: read -r prefix index port_path device_type friendly_name; do + echo "Testing serial configuration for: $friendly_name" + + # Create configuration test + cat > temp_config_test.c << 'EOF' +#include +#include +#include +#include +#include +#include "include/otp.h" + +int main(int argc, char* argv[]) { + if (argc != 3) { + printf("Usage: %s \n", argv[0]); + return 1; + } + + const char* port_path = argv[1]; + hardware_rng_device_type_t device_type = atoi(argv[2]); + + printf("TESTING_CONFIG:%s:%d\n", port_path, device_type); + + // Test opening the device + int fd = open(port_path, O_RDONLY | O_NOCTTY | O_NONBLOCK); + if (fd < 0) { + printf("FAILED:Cannot open device\n"); + return 1; + } + + // Test configuring the serial port + int config_result = configure_rng_serial_port(fd, device_type); + + if (config_result == 0) { + printf("SUCCESS:Serial port configured successfully\n"); + } else { + printf("FAILED:Serial port configuration failed\n"); + } + + close(fd); + return 0; +} +EOF + + # Compile and run configuration test + if gcc -Wall -Wextra -std=c99 -Iinclude -o temp_config_test temp_config_test.c src/trng.o src/util.o src/state.o src/ui.o -lm 2>/dev/null; then + + CONFIG_OUTPUT=$(./temp_config_test "$port_path" "$device_type" 2>/dev/null || echo "ERROR") + + if echo "$CONFIG_OUTPUT" | grep -q "SUCCESS:"; then + print_result "Serial configuration: $friendly_name" "PASS" "Port configured successfully" + elif echo "$CONFIG_OUTPUT" | grep -q "FAILED:"; then + REASON=$(echo "$CONFIG_OUTPUT" | grep "FAILED:" | cut -d: -f2) + print_result "Serial configuration: $friendly_name" "FAIL" "$REASON" + else + print_result "Serial configuration: $friendly_name" "FAIL" "Unexpected configuration result" + fi + + else + print_result "Configuration test compilation: $friendly_name" "FAIL" "Could not compile test program" + fi + done + + echo + # Clean up + rm -f temp_config_test temp_config_test.c +} + +# Function to test entropy quality +test_entropy_quality() { + echo -e "${BLUE}=== Entropy Quality Tests ===${NC}" + echo + + if [ ! -f temp_devices.txt ]; then + print_result "Entropy quality tests" "SKIP" "No devices detected" + return + fi + + # Test entropy quality for working devices + grep "DEVICE:" temp_devices.txt | while IFS=: read -r prefix index port_path device_type friendly_name; do + echo "Testing entropy quality for: $friendly_name" + + # Create entropy quality test + cat > temp_quality_test.c << 'EOF' +#include +#include +#include +#include +#include "include/otp.h" + +// Simple entropy quality check +double calculate_byte_entropy(unsigned char* data, size_t length) { + int counts[256] = {0}; + double entropy = 0.0; + + // Count byte frequencies + for (size_t i = 0; i < length; i++) { + counts[data[i]]++; + } + + // Calculate Shannon entropy + for (int i = 0; i < 256; i++) { + if (counts[i] > 0) { + double p = (double)counts[i] / length; + entropy -= p * log2(p); + } + } + + return entropy; +} + +int main(int argc, char* argv[]) { + if (argc != 4) { + printf("Usage: %s \n", argv[0]); + return 1; + } + + hardware_rng_device_t device; + snprintf(device.port_path, sizeof(device.port_path), "%s", argv[1]); + device.device_type = atoi(argv[2]); + snprintf(device.friendly_name, sizeof(device.friendly_name), "%s", argv[3]); + + // Test with 4KB sample + const size_t test_bytes = 4096; + unsigned char* test_buffer = malloc(test_bytes); + if (!test_buffer) { + printf("ERROR: Cannot allocate test buffer\n"); + return 1; + } + + size_t collected = 0; + printf("TESTING_QUALITY:%s\n", device.friendly_name); + + // Collect entropy sample + int result = collect_truerng_entropy_from_device(&device, test_buffer, test_bytes, &collected, 0); + + if (result == 0 && collected >= 1024) { // Need at least 1KB for meaningful analysis + double entropy = calculate_byte_entropy(test_buffer, collected); + double entropy_percentage = (entropy / 8.0) * 100.0; // Max entropy is 8 bits per byte + + if (entropy_percentage >= 95.0) { + printf("EXCELLENT:%0.2f:%zu\n", entropy_percentage, collected); + } else if (entropy_percentage >= 85.0) { + printf("GOOD:%0.2f:%zu\n", entropy_percentage, collected); + } else if (entropy_percentage >= 70.0) { + printf("FAIR:%0.2f:%zu\n", entropy_percentage, collected); + } else { + printf("POOR:%0.2f:%zu\n", entropy_percentage, collected); + } + } else { + printf("FAILED:%d:%zu\n", result, collected); + } + + free(test_buffer); + return 0; +} +EOF + + # Compile and run quality test + if gcc -Wall -Wextra -std=c99 -Iinclude -o temp_quality_test temp_quality_test.c src/trng.o src/util.o src/state.o src/ui.o -lm 2>/dev/null; then + + QUALITY_OUTPUT=$(timeout 30s ./temp_quality_test "$port_path" "$device_type" "$friendly_name" 2>/dev/null || echo "TIMEOUT") + + if echo "$QUALITY_OUTPUT" | grep -q "EXCELLENT:"; then + QUALITY_LINE=$(echo "$QUALITY_OUTPUT" | grep "EXCELLENT:") + PERCENTAGE=$(echo "$QUALITY_LINE" | cut -d: -f2) + BYTES=$(echo "$QUALITY_LINE" | cut -d: -f3) + print_result "Entropy quality: $friendly_name" "PASS" "Excellent quality (${PERCENTAGE}% entropy, ${BYTES} bytes)" + + elif echo "$QUALITY_OUTPUT" | grep -q "GOOD:"; then + QUALITY_LINE=$(echo "$QUALITY_OUTPUT" | grep "GOOD:") + PERCENTAGE=$(echo "$QUALITY_LINE" | cut -d: -f2) + BYTES=$(echo "$QUALITY_LINE" | cut -d: -f3) + print_result "Entropy quality: $friendly_name" "PASS" "Good quality (${PERCENTAGE}% entropy, ${BYTES} bytes)" + + elif echo "$QUALITY_OUTPUT" | grep -q "FAIR:"; then + QUALITY_LINE=$(echo "$QUALITY_OUTPUT" | grep "FAIR:") + PERCENTAGE=$(echo "$QUALITY_LINE" | cut -d: -f2) + BYTES=$(echo "$QUALITY_LINE" | cut -d: -f3) + print_result "Entropy quality: $friendly_name" "PASS" "Fair quality (${PERCENTAGE}% entropy, ${BYTES} bytes)" + + elif echo "$QUALITY_OUTPUT" | grep -q "POOR:"; then + QUALITY_LINE=$(echo "$QUALITY_OUTPUT" | grep "POOR:") + PERCENTAGE=$(echo "$QUALITY_LINE" | cut -d: -f2) + BYTES=$(echo "$QUALITY_LINE" | cut -d: -f3) + print_result "Entropy quality: $friendly_name" "FAIL" "Poor quality (${PERCENTAGE}% entropy, ${BYTES} bytes)" + + elif echo "$QUALITY_OUTPUT" | grep -q "FAILED:"; then + print_result "Entropy quality: $friendly_name" "FAIL" "Could not collect sufficient entropy for analysis" + + elif echo "$QUALITY_OUTPUT" | grep -q "TIMEOUT"; then + print_result "Entropy quality: $friendly_name" "FAIL" "Quality test timed out" + + else + print_result "Entropy quality: $friendly_name" "FAIL" "Unexpected quality test output" + fi + + else + print_result "Quality test compilation: $friendly_name" "FAIL" "Could not compile test program" + fi + done + + echo + # Clean up + rm -f temp_quality_test temp_quality_test.c +} + +# Function to print final summary +print_summary() { + echo + echo "========================================================================" + echo -e "${BLUE}Test Summary${NC}" + echo "========================================================================" + echo "Total tests run: $TOTAL_TESTS" + echo -e "Passed: ${GREEN}$PASSED_TESTS${NC}" + echo -e "Failed: ${RED}$FAILED_TESTS${NC}" + echo -e "Success rate: $(( (PASSED_TESTS * 100) / (TOTAL_TESTS > 0 ? TOTAL_TESTS : 1) ))%" + echo + + if [ $FAILED_TESTS -eq 0 ]; then + echo -e "${GREEN}🎉 All tests passed! Hardware RNG devices are working correctly.${NC}" + elif [ $PASSED_TESTS -gt $FAILED_TESTS ]; then + echo -e "${YELLOW}⚠ Some tests failed, but most devices are working.${NC}" + echo "Check the failed tests above for specific device issues." + else + echo -e "${RED}❌ Multiple test failures detected.${NC}" + echo "Hardware RNG devices may have connectivity or configuration issues." + fi + echo +} + +# Main test execution +main() { + echo "Starting comprehensive hardware RNG device testing..." + echo "This will test device detection, connectivity, configuration, and entropy quality." + echo + + # Ensure the OTP binary exists + if [ ! -f "./otp" ]; then + echo -e "${RED}Error: OTP binary not found. Please run 'make' first.${NC}" + exit 1 + fi + + # Run all test suites + test_device_detection + test_device_connectivity + test_device_configuration + test_entropy_quality + + # Clean up temporary files + rm -f temp_devices.txt + + # Print final summary + print_summary +} + +# Run main function +main "$@" diff --git a/test_swiftrng b/test_swiftrng new file mode 100755 index 0000000000000000000000000000000000000000..8cc209f2f2c8104c7f8fc36c11312e2d28abcb74 GIT binary patch literal 131312 zcmeFad3;pW`9FRGj39y&l~`+4q7@4w0^L@Xc=bSrdZW6@)`uhFVD0A+4&U2pq ztoPh|uP8rpc!#1Q&;E7vj`WzT>7$S`Q!wD`JWiQ6$m{Nvc|Ezj0dbh0@;VD;=A<^=O+>&uhI=Zx^N;S%|+uJ7{X_(OfJVXX=eJ^=#@Hd)n06 zlQQz(AY;#PIsj$-vuU{A6jLvp9;ekjo013rPWw1M@ju}=%G4`+NbM0$CmK0yYWbal zdd6fbzz_Tyw|l1=e(m{Tg<)V*<7Kb^w5jJGc1Zte6Z=h@I-_Dvz~82hN#! z;6cKf)k^V?F?IY&qv?(s!i@M{hlQHA^jOxzloNl&=Bk|r&+Gck+$Sd7ckdVPfBN)< zpY2W@%FQ~&;UDQ)m)ra)xFC+$qv%#|VNr1h!cHRs{(A3u?H(H@y)=FD=<&saH>YhA z(!$X1Vi4Ln1Y>qgJMiHsYYYEm2-y~VWjpu>wS(We9ln>g13#c0IKW;h{)PXV0ccCk zKeYp|YDdls+u{3WJ9MsVht6K@z;|qiexe=ve`tr!ly=~sw?n6UJNU=81HY;rIp?;6 zKd~MBN85oEowOn>oR&m@{qCq*>nNIg=(`=uMt5BR&nR6!z;+$DC zkP4}(b7oE$Jb3KnITOaunC#7-G-Ld9%7xk21S8k<@l%OCd%|=OoHcvujQC`v72r8O zK69!Up8)>jcJ)Gv_FqS(kVyn=obkY_DPlrg0aNOnl}B$5NL$@rg4l;+~M5I2CN-lYl#U_9Uo2d0NGsDc+n*VA<(j zd}hV0S(9dy4E|SY5CPZIAQzH}6|*SNq#1L`nw(}&QhUuYdVv>|jZaXz@d*%5RGTv+ zk1%QWY;Wq!32M>_M#qaMdK0EhhiVh2PM#c}3L8#<@#9nH%$hVw^cC;WKvV&;fXYnh z0s$s^5Skf4)xF5hm`UBo$EVJmp_FDSCD>i;Id-gZ+#Ge>*snfji6DCZWGsl}c2kKnnO}~&xuqaSq5Rn%ipU&y^VIF<2SI3_?;+SK{ z9(3SAgFSnBaBwy7kl^y*JTwm+cz95rzdATye$au3qG@%&e;x6!lUy-ZgnyABM@R?E zv^C{#XXiQ(ZU3qWZF>8lPMC6A^(X=V>l)OeR7Kuj&=+xiP>O%4-~JBM|BhZYVEiMO zM@%{MyG)(h-2;U>16v~a+k3B={3DX@;=OC~Jp{kA=bQZRrF=VYv&sKN$|K%)CjY3E zck()8fkK%ocAvUEt+}&V0NM4f?a!9&PpPo3FzZ$VV>vy5z zc?}M{tAR1`9r!^Gyvc!c?q&a)9r&phh}8DScp;dZ^nGTZMGemVi>Z{E8q ze`nlJD;zi+8T_qs z;C8Emg*6VmTY&9(bq*W>82r^c@Erpv_JtgH)PXlRaJ!agvG2fla`2lRxI4}^JMdi` zeDA%yU$`!}e_b4Si3K7pcHp}@@ZB8vPaJru12r|J1=B;J|lx;Da3a&m4G} z19unrF$c~$wEY|9!1uC1q+=X-PX|8EftNb)DGq#Z2R_Sz@8iJdIq;u5@P!V1UkAR( zf%kIYiyioW4t%Kt|Ahlz=D>S9@Z}ENY;j8I3I}ewB!RDT;C&rBH4dC}O8Zym!24Ms z(s~Depab9N!23J!1_wUCf%^`8paXAm;0HVKW(R(V1NTh7$G(B%p#AIOzz?%Pq{R;W za0kAd10UqTOC9)N2j1I(AK}0UIPf73e2@bl>cGn!_%H_^bKplh@KFx@CMM>+8SUH;Dk|FgjVEbu=I{Lcdav%vrV z7Wg8%*Eg}mrY^B`uOdv#p~qAgd7E2$9g8H|(pXR7mUz9$aA3x{ewIgh|oXCb72Vmzq9(6O8)&I z&xIiL5As|9LjNGog&*_}@?7vi{~*tW9`q0LT;M_fAkT#z^bhh}&_Vwo&xIWH5As~V zLH{7ng&Xt_@?5Y%{~*tW8uSnHT%bY!AkT#v^#9iC&jlI$ALO|ZgZ@FD8&A+b$a6sk z{ewIgV$eUxa{&hZgFF{r&_Bp?!3F(;JQrHfKge@|1^t6O7go?e$a6sj{ewIgQqVuh za{&eYgFF{b&_Bp?!36#PZS^mc{QE(k3nb_tL7odB=pW>{ z@PYn8o(mr6ALO~vf&M|B3moVlL*nc5EeN|z8QYe3J zC_g%s9~sJ*hw{Th`9nkbexZD?P=3!)z9f|I9?C~T`R^Vt)bGns{?kzY<52$HQ2zB$ z{>4!KnNYqulwTRj-yh1~8Or}Ll&=cqGogGkl%F5USA_D@L-|Re{JEk0=um!SC|@4R z4-4fF4dwfV^1VX&Jwy4DP`-O89|`5Zdo1MtQ2x_U{^L;o-BAAZQ2xbG{+Up|I+R}- z%HJQ#-xh}haIQ84Ur6JmLA@TldQs5T}{-NI>q+)%(kENPowf{OQR@>Y$ zRJ19i@E`S*3VsxLSBqUz1WqTmVrX5dK#uDvDC_ONG8V8oqBOn5KEOe z53Gr0k}Fu4DcSGPB5w`vyTnr2RaDD=2ZKPiTu%F0v`8l+WJ6OA!s~jy1$ZaL&p{ZmX7)pMCl3%Jd zg-bdqxzroPuYq)vW6=dQP+=L664k8hMUw+)khBPksEAgU7UbvcFgf~J&E{Bi|C+|1 z#!~BI8$L-i6veh*XTj?>N5|A`juw~P4Lv4Dd)IA_p7$K`!URaKOpf+nH@B;WG*@{DycG1LPGi=9_-!QsFEH4PPc&A`OMF9McL&Z1iQ zYdkD1*RcupP)}@FR3ClJi#}E(c50bl;`S}rvF+*d6v zjs4*pby0?Lro|1Ev{opeYbY}o{6Q4d@P`{xsIU03^yub^vA#Vdmg5os<>r=_XaDL% zelb=mu~c=JFF+u*(vzgBd2>rkDzgQ@p>~i>76XHd$1+vCM39vtSwpcI0Jq`-t$v?G zHEVnED9qPUCG~HIR2sUkL+G@SLM$XdLS2I&t$a~vM_O=rn)GI(4oE}|iE*0kA=!07 z0VBM-u?OmVes8D=*ggT?KZPFgN?bfo@p=V#YXiJJUA&FTcR+yGSFT8}pNqFb@s3uQ z|Iq(gjXxB%#8$CXayOXFTId+~jro{%8sghwF3n$&W;&^^A;*K=(j!rt7GuZK8Tt)T zBdF<>;!`DlbgG%w{0E$!O7;-${Pp5Jtr&Dv2P5`3UmCF+``hBZA%RkdTPVbit`JX9 zPZ~ZPZsSmp54RIDx9sbA-?yN{ZvzC<_K-u$5{^hT7pjGzU-2{4P;II ztlulp<^qSuLh?v7cdD4Yw)9q<6=8c{pNvA4)8H+pN&t&12$p&YVm!shl1dIj8GOye zThMjwva2!f4@7OnU&HxKI zpOZqOxw{meU>3K7F_ZNNLQ`#pb1=&ZZ1{Wn(gdRuJD0g! zCX-8ATTrrQn-f_d z&yi3emP*C|#NcO&a#8F*0<~1~Xh`X#wDG=DIW|}d=3*LL08R-Q&7RfR7q!^v*1$fP z;-r$JSemG2;$3pC|LJEM3!N$=xuu9|+xiaiUzHLBc~`VEZPhE(gW47!v&@e50pLGr4p@CE2Q6$Y_FIz#h7F}97>G!tZJH%fn@w>-=e+6y>> zDgjjE%9Sn@qygfcL%NK;mhW5EP)^eR4FrK<#wce&94xu^*j?$e+oO=(MP!#v z_69ME-&oGU0o))jVKGkMij8*ySRJNx12Nx#&m7FUMa8j%)G7j|k&8rT-`l>ShQTZC z8|o`el%cXZ@ccptJWg|L)ll!#;|61JeSBZ*40`o-rR?wdFW0M$ldR-L;x1cbAi#8A zFRYU~V#Z!k3c73rP)tJIdRLr(B(}3n1&nhnpVK{2%~12Am9JsV5cCK==}L_rde(z5 z1~J}QdWyyqtq4c9;wX$Y++M(jy5%SlwwG(TJ|NrXe5C$UcRqq?$2bOcs(KYRW>YI4 z#cwQCwH!%!qLEG#nq|abHWB%}zfMm_fgU2WjujKtOfX*X(4_WyJn9H3>!rA6m(>{f zP`mposV$Z}YLi66{%v60l*jt1U`3N>IrK84c40dq>C^_SH7^4C8XT9*htIJPE|q*5 z7*|&Fm+gK*B-evDnW{$C%w+x{iJ>DR@xVBz<(q(>P1c}Xl};*Z$t}O2?lN4~f&*gX z00^SwN-oV8-l2t2rNOqGdsXzegig!j&TB>Jf_&jQ1%x2Im-|ftp{{w{{)*ctFVTp6 z;m%svO(jAX?lm3$((5E25=7uII&cqmT1f-H1d6m`#9Sm}-X>rr9?)XVinyw<7l$n;vb=E%|-ioDa zEdd!$S09zH|57ffpIykA3>^{3m>I>Mi=mw=#)ZUjD(jyG6(O0%Z8Z~*n>vD+_68@} zP@>oGgI}l8>5c6)x^tjHei49MgX2>3?@LuI54W+*=oRVm`w&`?;7l=c+|1#3gV2fj z%R5#4I$i!$uSc(dxaCi!%UAR|>H}V)+M|hv&8hN7)8(rYbpul6t8meMAxxu}z1Du) zas@8em#^=-zC4TYFJG~y1D7CRHI&M_fHX|jIJW>ak5+VXI-^oM%ocw1t#VB?tTpV> z_Q)O*FZ}33k#|L+;Ug>f_YfRX6;ZmF8et8b#Odoe*c5|>=^A^$Ja%HcA0%qCi~H0s zwD!{rW2yPeW2uT|vDE0LvDC=L$EC`z4ci{prHd2umwE9Wku3J&osldJmQk;9#*;2z zUbz0Khif5yV*aDvB|{VQul3>w_(T862@8au1L0-aQ4aQ;1^=d(Gq@!or}mPU7}93J zQU0hzzzc{js6IrfV)+Ro&Rp>Vm(&p;g%AMCnt(P4S{CO{vdF4J@E_*?0Vt}T#KChiJY0mvj3MZhqpMonH68%B`-gpcWPF5)7&a1dP zU5T(lw;8==e`(eT8j8H95qUl){@GA0|7V!}Oy^qKYt}bDd6!Sj0pJUzwQ3=#q zdJD|&A5gn9pte1ziTo9Zh)B`o9Z(~%-6m6Y3pt4(zYeOt1Vq@SDOQAzhT(oTt<V%2V2zuV*T_GxQm~-9eFy`rN8RoulhM18hff!M=m7^)7yWEa|>F(oOD*jhLkUj zUd1t?vD4zlqQxrD-#}KlALNi&YDhe+BtVg&H&d07X!CbQJy2bYS|~1Vv-@}eT05Qf zm77MzC7A{=W+CYkQLgoHi72)nCAfv~Fplcv&$TPIo((Ax-w@Q}W67x-Be@h(+3p891R5-c6OimYDyVcZo5^;pn6r(&ewM=J6QqfOe!! z(IWy14eOx@+VDp23R5G}roL~z@9K*g2qoH>s(1}UVpuTpmpd+(qG2uGvm zL~&6xnNXwFp*3xMA|@d=AeK4^Ym=fkVwnY9c(Fc~SdT+cbDLtRi<@GZOA+kxH$ zCf29EXhY)t=Gt7x)N`p<*iKU$zKGpPT5#0HSmrk}e5BA5zXWp@jG8Ay6HzhuD7j`L z3v?j#heOJ2`A772V?15{(N<@lV8p3s?Y80Ra0c8&O_6jeeci#g8jKU=9~Gf|Ncn4* zSJE-;d3JG;mI5i3E*W?WOqwbGS8%&v9Ms|J(#-Q3XjYWd>>tCm7>N?|eQ!aRbh!`W z3m9*&?yGJY{den@dr%7q?P{D^tPKiU%W#Gfp0=&~FFFo^FuE@6xS=Ykb}_%BxDd2e zTO5Xhd|O0pj$&)Ue60q-xk{%2Ptbfi4Ok^%qRX#SQB{T)l+|;HxddY*Y0h-Y~BWH@&xqB*TCto$V3C4t4LJyb}s3^iA`9gj54U zYNLOauqtncP5ofF{s-#7z;WDlWIGuJ)ke|-s3N-pSHDedZ4tml_3P2qVB>;lqd}|! zy;pg|h!p(A{fOK5R$D} z%)XXJ%d)6s*ddV|N-mzL|R4=qz*Fv%Hg*jlg-Sbo`l?u#v#k-iA?wt_& zMXeA}tFp~bF9wo@ZH0@HRP{XSkXkuQlBy|4LP6rI-;#@nf%6eabhKX3Q=8$DZ`ont zCXm$b^HS=AE+3~GgfPQ%8So2_X7r%f6C#2aKOZ4NVKmxKw^cJG%13s;z7Vp>#VQID zFOKchDgkJ9vtD}(LV=(Zz-V2OZ5)!PxxdIRH2qV14lLn&Z z%akk^h9d80+EkX2U80%^c6`k?7~L1k%%U7pj*}9EpsA)d2YdSuyh)JkECEjt(wdVF z21J*WX#5bU%q#7hl#-mZ7}~XBw>HbrJpnG9VYuIsj}3sVfA<^6S|eutF~~}wHcm#< zdu~sSrOky%2Q!-|F_Cp(7q9Uk)LCQdtSPM1@_Ip?0k%%K%RU_96*P#pJIJeqi|ryV z(_EdHC32DG>NR(P<~A~yO*SB5SCCCUWvyx4;IAWqDA&=qs{Zxlod-c}T*Y!qZ$S;lvR!5QRv*ir#R_ zR5OL|BVLHyY_hu}s~ZbXVkFl-;*2**Liz|&k@4gP;1~80O{keo-U19dp5Z0PobS$8 z;yT+~PKKs5Q}P0gX?lX|)odq1OseI@w`UaMN(S@ky8|&(rKd=$n*bhx9c1k8W+KCd z{5tW8@|Xx7Ih?`>#K@HVI?rgotupG=KBGu0M*n^djGlA!&6Gs)jH)39Tsop{jsEb{ zb~UOM8m>k+fKelSt5(Gnf>P>K_e|w-eA`?OZJ*2BR$LAM7c^s9mx27^tL*LQ(nK|X zy?F7JdI8f$lXGccGl7#$Z2&`Ggov{ILXNyaF=madZ0bdsT~)2Nwb z&I52!bsS4T_w&4_dlCbu@>rlC#KU9|HzrWQQc_*!Y$(Jr zY^>0tI}E(XE5cALh-^QtwTzUJeXrj3yx7cAYXa&M$ygoPuYrV8Tjw6uf&E%dd_PCE zd=H`xdl+Dd&w~8{XLsVtO=ZwK)S;lqtb@9;DVj~z^HR-DD5Z|kJlNb~7Moi{h$f!_ zj#w{uq6Uqa4A{SPEpWC+ z0Ob9QN6Qwb=HG(#&0?%?7KME2{|3(@VF|e$`$WspME@a{!;K8Mo$)U5Nv)RJg8rsp z7e-yGd>JY(!+v6nw;+&hjKmV<%dlmM5>%f~^Cg;(oqLWzG9|sym`opWB|{%guneoD zWii}8T3sfzWkq!e)LdWQgdir}tpD1JKu(WdL_AafJUrHuTgWQuNF)ui>CwxvBlya$ zA%! zjV|CoFq!^(aDJk>rD7igUh^qiKAib`XbH!geXYwu)}QdU7VYsO^-9K+F%v}P7SzL8 z8)opA`vb|~NQvOo;6{JRD?I|q`%-d_Ar&Dk@clcjn`k~RnjC{d|Fgf5XL1bbq$QC7 zqvAA6JQLdm7MF6^@e5~6_;9DN(Z2xgRB{i{y0V(Tyz3FYu9osP;)f;xG#Gz+yeMME z&j@(U0b~V_$l?DTaRu7@Y zU!m1;F^*cRB&+2{jx4GkyN348`qw?jrwHys<1_xj1zjWVL-~O(LJu6;0yTs)6EDuQ zFT99W4&uZ#k4*li3}>-7^t9u}uRzp@09W6d57J^(SYH{Tl`Mj+NTZdXLyYKSV!xq3 z$Bno5jR%0ah7aFS_MM*>*~(NlCJ>2n4Uw2*N34oNgHmECJcfw{AiV*RTQn>}eC0 zfl-zN1&(IoRqW?qC#9VKe}`xTp7u}6E$7^==nS!9Ai5f!JV@_QrMCjv+&{Hw6|SR? zmF+V0KsZ#+%3z<0=n3fpUM>!-)*EpFje&MwzN(;s^4oQ+(tKPzlDp0+)uv8TEqSJ1tB52Z5)`E?rD$~-ndp>o9B75hAyye8 zEg=*cAYwwu`Gs0QHLPYLO^3Fc5WQ}bHXV!ne^3e&bRtz;>L`$j+#_Z&hVM_^Gm%FW z<_~~8+>P+`s3M+&kplW_u|ZinmC`5cs3eYXi4=S)LjaI+*m@I0xi>&ZMJTG+9T;L4 z?ANhoT9Vu&G)3OJxc}-3cLSu!CYO-~{u&R&jFxq=EvJ^${onK4Dq~S4A!t}g6MKl5 z@$#pk!Ldez6ChzWd50z2GcDIH*{px@Go(Wt&|zZeyxL~__zNgH?W3JLcswS7J2%uN zcN+KaGPrq_=6=15jUR!fy*uIaK_1?j@MoI}`=CN29@xT;vh+4caV?!&ythAwp^?Vz zVgbdXYieRe_`g2-xEFoArk7XBBWe}3I7iWdZUH7YRil;TrJERuE$s3wtI?`$WUhZ2 zy-4|2Ubg%-0KLYa<33evY4ow4!nr`!}B;D3Tq#jFY)0!7`Qkl-t}lxoD^w{O15#TWA_Gh zL)&&=X>;_fa>POZNF(^n>5Mx|2h=p~g?laC{|3P3=&x!86qBY3Z5PG{)`vUpVmQeO z%qur7=9Cc~Hy1Y8B9f$P9+J>1AcjT>XmGpZa1cVPU&RWz!+-?uNClDr`U)$l48_wGNkj<^&1$Zkg!ql5R1@o1FCyL_9>6?4V;@ zT`lV-YlvwmVII&eh_pfQ6#M(Kd}%sgy1OZrS*VaGxg=luEquw*v2r!rDEc2@z`S6u zB4_k8I?EX6(>C^Rm}*Z1-m*SD_!f#@h*!bMK~BlGoN$YY#r>X+tA zAIO&u%-4t4M3HDE--iw>GsmtZaB&Yh0Ry(ctC?W-^B9p60_0F6l`rR&HCJ|I^psMlV;LIzk8PVFEFUHaQDgmZjTlmHN)^Sh@+r%#;weNH*B_na*D;DHx`F61B)Mw;DE(_ z8W;}^1{N0pYTu}}yNJaF*oMXXiDYK>Nq#wXZm?epva7KnVZ}ePK>V+)T@y83u(9)x z?E*D-Ex-$$q%DzqZh-;vTeDO|jkNJeTsk;QH>Mcp86iMr$l{kS}-=XBGo!o18>dEeR%mIVapAqXI&j$i=U zUIG~p=}Loo;>bL5qM8iQ8zc!!E4#jUUJP7y`8tJ{S5`COvi@S+L97y3IwM#%`Xs9E zUJc}6#1=F$wWXYi6){{vYc*#A#>^L?*81dU*irWy**jXgA+%rS(LiJt~pYVI&DfvvaZ>Q6g3uD(E2jx@#9)jq>BUGh1zAy@CoqP(l?c>FhT^%+I1 zFa7H?p!lD;I{o;6=<0o4jaIJO7FYKKudTcKpPcarEp?EXnJwihQPp(By}=B7+YilA z^ZkX^L}U?JZR57$dmoclj5rP~hu*&mlBAL+qDoqR`Cw*HU03R(T$U?=50*z7mWP35 z?g;cdiR#l)uWPijJjis%#$b@Sg4=~e=@L!yCTpUaJh8FL_u})Z!j_i4A^>}}rKX9c ztB4ev@JcLm$WEF`e1aZI+aJJ1IAnn{jxYP)!xD-6iCvVqpTvOW-UC!kQdr^z-Ap6w zp*jx{_Vf2~#YoZE=ezh%0w0xC+OIUVFk?lCq#RQ9odY*A&|0MxxR$wIXOLA51P5>z$j5oD#umeL3=Ue zg8oK*5O~Zb&`Ako41pvGqyhr5iX)8QsqbvJ;`1xH-y+1}FKGTtL*f{c7#@%q9!(BL zrj_vyb%`wiF~!he1G#_CQkA}dfVr zMBe4~L-De%&3JhUOw&p7<0ha)+0sQzWP~t|NJvm%8%dDx{L~|%a2e!E(JEkzHZU-G zu=(Kc9e2)sRD!5wrt1C`%;L|+PfFOR(k;>C1DH6V3D1Ijg}v)xkXv7#a^J&@E7}Dc zv;}=h8^hRxKyJKL1&%Fs`^O(StPT3kQRZ2gr_*hf#g{zbSxp_4~t?7!i8H#-Gi=Te{@L3e$=R!4WC)LY2wiDp9(n?tPF)|F1u))bgTWcxaOpYR zGLh2?WGgo$`sHOSxJ_TmAwE^@f8BZlipe{mxK%ErE%Y4!jX1;K8&kjBQ{W3T69twS z+P?zAXP84Aaq?o+kXg;L6_CIDGq3R?76QjE==|Yy7FI8Z1(n@iG??Ao|9`lPT5yu0 z8YaOL6Ya9>XIL6(v_D? zIGISD<~C~X8O=2?hx4OIU@_dZh?}e277V#~oe;})ubNi~qf;SzER~$cEDlZ*JzBYz z+nq@c(wK7rq&GC8l^5ngF}aIi>EQ+g3BcY+0z*#xGHl2=xV4fZQ}U&lO5*+?Sca>8 z-o`fcDCWHnikQpE1$SKA*y8}miplO9k`sh=#4fspoaug-aFH0f_5tP6 zvyjUq<+6$u^YzL91TCqNk}88BIULeR)O3gqYr*_Hdd%BLbL%{xqwX=U9@ zai2b^QsYYxY}(jV^lpRfqHUS z5vNgDgtJLM0SSBX=vZ`aG|p}s6Bgxo2W6N+`H~Fq9fF@E9_T)V%a6IWeJA=pP(PiV2G}-rv+*F`kvF*Id)U=lBkp@@CwOKyBxmYl?!Klfo=%rP z&EW#?m6-a<8KXy!j@5orTHD++Rhz2sQ-}9Vq{=_ir}QvP!-%)vLj!|sVt#XQqxN%j z0on466f#@>4wKw30m2Q`A>~ic{~6NEs3JTiL@vCSD@Xb8HbXOA#1nbjj=E{vQJe5A zQf)&qZ@_Mjw5g~*RlX%%zNOaRIni(wpH_TFWP3+tgE7~o@K(~uz36(Qk98_q z)IpHDZ54SzA@X)xMLxwv-YVuV986j=dhI>vLwWZXe~r7-Eq+m7JT@g}WgM*ch9z+K z8a^#_Xli}!_dQb^`h1>xuIQDb=layAYUO#eK6R;eu?g#9Q)|@qerak$?bkg4t}S}D zNJ3z6dBf#ZVC6EwAXnb(1ha`IdA?BY)nk5i7nWJ&c+R#V(a=$vHigbT#BsR1Au|fF zXlz|=bBENrRDDqmZhPRtyi_sDxF5m&K^rGShgIO{M0rixQ?P^e{Z_HGl7{W3yW0p` zehfAgwnZXeVW2{Q9TMdmi=+)T_G>qqDR>X=9HX0vJda*0-AP-|e}UZPmYfgv>I&10 z{v+x7S#oSm|KG{I_nA?)DKY<}miW%-%v$2z67x5;#J9uJu7xLY(Pg0fIPP}SJ?8F) zoe);F4Lh@aqMdeQ`$Rk4F5gbogM-W8ncq`dVR2jSwLZn}P68y4*<~9rcWd4D>(isR zEJ6^XwKYVq{o*?WO*qm=xlhuf>t2DLuufldQlmXM-bcaLoU91OrUZftbZ~|R_kUmj z^q)=0H|afvtbg*Ig~5rg)61PCmGA(tSWc#>7vHAxU{IWfuE7k7pKEQuFp^C#VV>Rw zks93dM6xQDWrXr_1t7Tx!3@_vXzre;IqVLO#}(Z`Q-r}@l*KB}WBo+1qLuSd%ID>y zm7EKb+G@;FI9Ps%6NP3Xch9Xt@?d2a<0+k*)n!D})xo7GCk#g6$u7t*oViuyQe2g% zI7TVr{TL8GQPXX8SK#Vu9ftlj4K44a=l~-Kt$PhE*}I@}?+ADaz=`?qc=0}ZCAYULXy{d~za2(D1i?g9TBInFfYj#PlcC!ap5bYv{mC6*e~CH6%5X{Q~1e0jfqu~e)$TechU zx~?zV1FknO1}P~;?^yWGk?-LvM~X~UgGeTg{8VY=RbvP-B;=gKrhkR0tlA2dZc0Vm z>QZ^E6_wdrp|YN)v)0-zmioK@8Y~nm+K8h@UFlSy8h^o6!2VU@}ut`2Gn_8!M=ZZ zh3Hm2hVOSo8$;qYC%yt6s|yxpN)G*$W)MZ2=n(hf0EQRr`(08m4P1|X$by186co1&-Yxa{z*@s?;Bz;T0Xk9V5Rf&bRzm82+V1;XuNE>k!gTG?&U-e=Nh90P0=|&Zy80 zw%`mDputc|{59ep2e0#9$mc7u)AfDJK-@i14A`w60JI1E;>GVwdM;R-O-{pw5Ca=t zlUSwTV!f5FBBngp6hDT6mv?SD!uuWUflx;1Daz7bF_uITbFnzNco&<1*N2Le6A zXDG^K1~5q{1yM)nJ_A{vWI^yaRtD`Eix9l}N8q|2{#=gom}UG4kUXH1^>0~fU3Mq7 zQNga6Qd>UKOm{w9-b&v)hLTmRvdK3fKOE*w&L-cZm+|H7yM%fSM-$FCom(z~6TIE$D%u$1HudXm=>LiI z^ZNb$cUC_i2N(Qng;FR4`cSi~R!1>)|lsAq822Pq7>(`(&+o} zN-D~Ui0u?vBkM1PY`?kD%HC0A*N!byvgsq*UwVSOHA;G`HJGS1-uMSmvi=1sgZ7=^9z$$*B__;3`?5mXCkC`fD{WOW>z}3`8$cP; z8L5qTnM*E7U@)@&4HWnibii2SlfYs5OwIUr9 zh%`h*vc12sk?>JW@n{XYO4yy_z;8ZOX158sl@dOgYELDW%6P7gIZXeNjL?sD@Gblx zKxxMtX~(NP)_}MDRt#vRy-~AP+Dc^AfU@CkhK}fx8q6+I$t@T?@No|rO-f;1kwzkU zcV(uL{C9A~mji4$p4V3xeh#(#fy&7%VO0mksMEjA8 zO$hdc3k)ryFQiAHpO^cE$W*1gG9m%SC)5vGbthIu?@!X{D&c^xpE-M5*vh>>F|jIv z+0jvNq&YGx%cP!=Bac58JUt(rY7z1pd4elh)>x@s&TuAx7`k9B+>OyYA2)A ztq4*1PRJkwXv$b0bnc8>$MB|#pINNxiBomnd2TO~O0poB%hy73&dSyXMl7np8{;B_ zDFcRZA=160Fw5VjOVfu}iDXG-upTnL`#ue3mH@FJ1n>qO6AKlm0_$&zQhM@=0*RhIUY+nW#|aG$bbr>rpADI88V%sv-&hTI zfkb$~i~M-oZl(5QnFbX=9fEh&;088Kc!q0&F@_=HBk=lNhW=2?@L>Z;gCXLMa#Nre zQkMUX9U&qf_CbLa12-cwf|$oY{e9_4C%ODL;uupn>Lwa?Pr>J+@MQ+DLm~eY!5`v? zmJnxHAWkQUqf8LzjYX6#$q^W)Z(@Q^a3R4a4kHM1$~dS2=N`8n3W9iO;%K0naKxV4 z&LWFUoK9p+;_U<4E}3AX9ISY?9$PO1Y%K`a1X@bFk33Gqt})a7rN7g)(&_%0y4h}6 z#l+XYC~c+xTh=CwwvG=Fd{fmeE7k6fn9?vqBZdcqHI^wmQca z+>8S2xJtYai;fc;h-RH!%|0VTEG`ZICUD4M zDwWL2{q@xaa({xX8t9>bw6riA+CoEiEDgxxtNSmjDRX*+4YI4M)Lj1a8aq(E9rSC|bw z9-n1ZC=ELu=h4x9>8P|^O{c{0{;o>v@Sfxee+seWC?ze4*^?NqWc;~F2^mY_@qog+ zoTy^m4{?Ke##vS%h3n+|cdt7F{iIN!DFM0bgj`ijB~f;wywVm?z-mw-tL+0;{gu@yqhvAdjN87&W zE1dK6Ptbr##$&vwsZUgir%1HS39L39I@r%~~t(2xJ}G4&hcsIwN=vf9Jb)50kLN|6qxwtbb`C z|0g-q&AaslEw%h{*O8@`|8+oC{*Q9Vz$<{MIGUvBkFU943CBj0Ug=nb@z?!L@j31A zoP=D~->i(S9S$y(6J686HE{bP&->ym+5o8YuF5}oG>rgTns zxlQzaI9>rl{bS-c3qR@Ie08Adq{%z(#jTGncx1 zFraaaovRDrzD1w#I<7V{O2b^(p=@_tN zGp`cdjO2Oun9Wwc!$gbyAHpr0JdV=gkKb{ts)32q0>be=oJ^BTyfz4D{W3H^ZjEDc zaI!GV?>79AfupF2YSQbu;E_CU(j@Ov^0xhkwofabxZ8?{u~Hm*CdA|0WH3Rq?lIb^ z6O1;r0=4NajmJ_Pg=&GqmSRLvq%55gV%kLoVtuGimm<)-1Ez-}BA#h*dW%D-tE;gf zHuH{u;C?qH`TjDAwcdind0j8p+4Z1lhhaWYHo%Myb*Lq4$}$6Z8~_z86FJ7fZp0vt zXth!O(WM1Z{W`J|QL)hUdJpg{m|hRS^m-!>u-3Pl^_Fi8ri8;0mQW2lUN|)=E&B!S z)ii252XVQDE+A5-B98EHECDp4Ot#DMTMb!T+p)k-{%hO7K8Z#T9mkhQ1OQlf`UOm>16 zm^b6oeDZlP&=TQs2ioK3rIh$B!l>Z;Vcg6Mn|USB95dswGInaI>M7sS5-Z0cX=U#! zDa<6F5}c6MuU(>AN0aE}*qjaWT!UQDobOg-d|Ky@0^}NlTncCq=$9&TX~kuEstaAJ zw#}SksA6j{U_Z}A4BDSX#JNH%=OP!;Qf!$gN)^e}`8LygKSv;rdq{<>-xtI*DpH&R zsClgSp0B4>#e1j0;${+liJ`Qxkkb3eDy5@9DVw|;9AF5q5!`sKCq`%^IWa;IPmJKH zaCCSmHYY}|sUy$)iIIB{wh1AC6C-BrQd-#0<^1imCHYsb5lFZJ4NLqC2?)K=ZnEF2u_FCk={f)f__{ZxUgRiUT2%yz~g~ zgMyO^7ZYF67^WQWHld#A$wXaz7@g6B5mTU50!?Qm8t}~r0E57-6+sjOJ3ZVndGBS) zp7pO*8HEP2*@^;@H=L9DH1H8nFjus>jb%=7_gs7y;K6J|O{^hQupVj=7A zTFCEA@KXk_>o~oT6=iY2y6)oOa`*>fOX1Hl#GX}Yt?*qnE4-o0&jR5uQQFpS9q8$l zz622yC2~w>q*hvhf!$IKzmR-u=Qa^F!f zWz^bLS!vTarBK=1<`gJt_pm>Ea67nR?&N-?kU92G=WK94rdM4|?H zERaE-G7k=SQ1Z+71wIrjYm>?=3b zccJ*zv9G`_wX#f-Dt#S^yk{UhSSAEj&tMM#cCZbXqqDFo`!^NUca&glF7#xW=p@^8 z@(^$^yP1MOfEmq!?7Nl1IMzWQB~@i2FdoJeG;|txk+?>Mh>8tDqRE7CF|V+Z({&Yx z!`xYdrseSPxpY8^J2;eD&t%J$p2_aI3L}%3lNFcYjaQ+qqisZlm!!J9_XGV9-}d40 z7N8OX32=CO7U&vC7R2yYWb7JvIdsB^D0~rKidog|hQ5URpc|gYSK=V_@I`q-N_t^y z(wO>qjq@x&py8F&!a~0MYp__MfX7L#cFEI*bNVXelwHbs*p`aiL z$6<229FyB+t>TAY=;gyIco)6-m;p}pjb4F31-{t2$E#uz^CSTdiAm`)TZ)DNgLRfu z^X55&aGO{GUGm~=?Yy)&2jMRpa4XA@q^gEWCNls@Sb9V>3o|9nYlF~ugbfw@Wh}sc z8Iqt)?8{NEt;5rQrm^$qa6t^G;%=r-^e}L44@R$Zy83n?z}Y->D?vO97v?neSX|;p zCzJd+UN%7j^Z<5nnws?kn0uPKpdf#mx)pf0f$LMB8*YWCsYN17yY17|q?V|rdA<0N zc&8aH%)OJjco(3k)~f|KpLs^06rH*pS;oyK6jQ4ObF=$&@>NHpG3-DdK|uVoItYl{=v)&J ziY^U4xLwjgTAG!Ag^|A$9uAuAShBK*xb(_K7XiNA;F<;W-*IqB8R#s;zEdl4X;Cox(Tv}y31H>rsy9%MJwc|=$)ZzLI{93 zE9s$bsj`(r-A&Wn_KO2lc$E<7RxgDITQ$ilLea`bA$Sl7Xq>rcV9FC{BfG+F0YNxf zG0V}F5bfDkXd8)!9T=CObV+}Qh0*EoSd`F^In52IA8?qDs_LA*IXlGtCK9peLgX~u zUeO@HC!MseKm0NvTP!XH#<@g$i#$d%mY(F6b`_=MQ^R~OHNSCL!}k#H^Py+IKABvu zQiw3y{)Xe??(cn&r?En5G)ba*^{GcI-PZRd7k6LmP+O&Bl$y$ydV?R7u7Q46Jgp{$ zyFGvZ3&m;1kRnAMbFPc&38wkzGRJtS(}!2WE?@0Dx7xG678m^}^2@)Mo_knfz4uk^@ICuxb6H_FrdEjX7U&ZkLb_`=wZD~B3{fqm-&Nz=e z4VTa1)~@ai@$3ZlY*Tmtpsqgs7ao;&FVr!yi92A}>@nZ->?+#f(Zb+UoX%%BdxD2O zNhV7B2Y{M`x-odO%=ehJ6`~da)%m9B*5(5XBeX;HqHi$HuB^mw*av69`REDw3E$hm zh!ejXF0f7i9MtxYnJZpefyz3rucM?~gH{p7sqMeN&%X#~VJmS@gdRff6}9T2rbz{AoI*4l`XL2q zbquq{Sje6RWbMhX?TG4lAG7dnli}fXtqLp*FE9+RC}h~6S<7$(vw4OeOtcJtCJa^4 zBC&?CW1KT28oL*oWH3Xj6TvcKB`r3)Ruxx^f~*k3R18Vr+aQUFvaEmp7Bie?A{D0ANY={R z$ZIc71;9@@wQ4(|xJtiP|yAo`-}o#$Ia zy$52!JfPLLu4Q_FZ(5I$DMHKN^27T^vcb32n5YRjbm8TO?0QnlRoa7pld@LhvviRu z1!vE{%rTDCz1%H5S4t!Ej27oXY!JA{WKTxcKjR{~jnl)9E6YsbKC{gShQb5Nv#6C{ z=3$yRfW1;mK4gc@jCw>yxck0y7BTc~t#*TRnIb+9pKiMkGWD7@;Cq-nzLZAAU z%ycEt9%kqkzJQzeGW3=DW+#9aY8($<`T}k(3x~nf@gS6FF5-I$^?lxO@EruUL5yF2 zwy*eJ2%I*j6?dcHM_MQ`a~m!6yC=gIx{0Ey9butHl$++Un9dJb$SnR(vo^`JZIjno zl{Uc(Jpz3fW9}m%DZ3Na3YQW}Lx!1$@@Ds#B|VLVVoT@|#w5GOVN0 z=$Z$idV4O~S<7i98&&bnJbYe$2lTjJoM;wo-`T^i-&jv{tyZ8qWhQ z3?9522|=J@AV?Do2SH9G4R!%qY#97p8T1Fe#Y)d#aW0X9@ASdK2KOrv+S*3cFCarc z@?_$PWolbb1TE~wFsNR7ENQP?j3iZcEq^nM@EZ=A_b$|+AvT%?6WBLJF>#8SS)5`< zqEGT@ISmwb4fGt)CA@QW#k?)IoE7kwyG&0zH47d2X4iL!J)?4*LC2>dMu)H$viKe_-t@&cXxJAR;j*@&Q>>_Ibs1zZ6PY*9*|ti4tlx@d zp0^$qaW0v1lPTJSTo(51hqY=)@BfMws+N^A(GFf?&4)fvHTi3<3No2(R3Xy?uOv>^ zlQp+O-t^D@nlmMOv#5e!L6;(QCUYaXVp0Z#tcUUa{#X18VoNqtV6wUxzH%!j!|9K1 zNtnpvK@ge@8!0dw5V=AYOf|Bnn}1+~HO!ee2BOgjsr9%*7yt_G>LA~ICc9Y~#VYW= ztmIN5!eMX1qvT`e7_Xj@?~Qw*@B}UNpC1isnaJrb?%lwZ17X)1q`QEG4h4hc671$? zllM_1W}k&BY01WxW-F7$$Dy+)d<%ZE$rV6jHk*9ZR`@frT49I)qm@?&kl50+lHgEj zyI|IgP1wpfkmsv0@*LQ4xtEfM8y)*vLB%c9q9!4^bg(c(~% ztD}njgF14gHdL&RcpFz!Ua3Ey79iwJS!b)5>4&_)tH|dt+HV{t1(-b~#Dhi`t9UPn zT@X$^FgXpviT1-RzY9X=5x_^CnCU(P>4}-hG@{|L3&BRrM<&V@2Gz)~79ie%BRDi;>G^RTXBJByb+by zl^BINFCC4`G5O1J`O7K!%UStLeyYh-TbRFGWG>g^s4dFTOvwd1e|L}rp7%yB_^8q~ z6bK)BXLRC&^AbzN2FbwXBfKnOKOl(c2VOpv74UWPV=XXKGIa&Dmlb#en=V#sIN+F( zD!3a2VOEz>1P$}dDSTW{MO2~Kzx)EwY;qOlz+dib_D5P*-q;t%lhJ0@N1UxsT-mER zTzL~r=wqQ_*1Ebao=UzzT0f3(6V=h}B5Ad2u#8x*pQ6I{><`Ljdh1vkVQOX@KUgVI z!$JH+`DE0#*C~@aWkuW0M+SuxGd;FTRMRkcY8C-~^MmMzI^*I-T%@a1*jLg^s@Sp0 z(ZH27Nh~vT*L>-tTB?h>qfa?{6lWi`BU2kjq-tWRuR-m2P-DwwU+h1}r5IXALJWvT zPcF96fB78>aqf+#m4@qVJ4{&LkxPAT?>;hEfhuvtRHLWEEb z8zETFGD5_{u*W+mvTme8>G|`)NIiHV37A+p6h|lMG5uEW2;d}|$M6d$`Uy{v`IrJ? zzsr7+xF2d~lQrPWzijepW1noY&RjKK>Qujr)v1{2wutn@hNDQa)MnFF&W0v1+a8H( zVOG%%uaW>6eAgAf36Y>EAs|?UCDtNwNN6izW@U8ZDE9{m3S;F{t!WxhQ|zJzy8`D% z#qo~?d$C;OA%Pm?ymd7&XUO`i7?YuM_jiEYHg3V}*y@(6-Ur$H1iN>XiTuP!nK=iI z?98(nJjuGF$yO6c(SebGn*oI4W&jfNLKOle=obCO2|CdiUiNZ3>_T5xvI4W?bPr{t z(2;GJxl&Ks)~5_rwyh&VSP>PGCO7i zuIl0WnA%pan$D)pvqDLn7u3BL_V-)wi#dBow`%uV9Aj@~BYi7-Er}~Rj*~AZbTUq1 z)aVP#W7yhAaj-T+B6}@F!(PiA-D|PP2f`e<`A?*1@~?DYCNkxA@uPng=bV|yx3D1x zMwgZBcrK2@lq*)pF{ej#KPnSH0?IAM|1aJEJKNex7H-fMB2_{lpV=hW2 zAkD&R{vKb^$A9GvzSQVZ<|Ik-5e#sO%RZvmu&~cn%lCQBhD5ocBf;j zyE%`64d!mx&7qLgg}XUqhPfJ(A>wztnR7m&vjK94B!KB`m9} z%XGWtL8RDjxgQC__+BPBy_JdFDOcQX`J-HMV*4k#G85ZN=wmD>4ZW99#_gNik%HbW zM9oB&Ne$8?T(@teNM?p73Cz&zW9a$UT@S)oqfu6D-=Haa_~Z6X{&HOYa!USkR{nBc z{&Hdda*?^j-UzR_1O%7-_6>7u`jZ=sRYw7^4q$@s*b`CKibOJSSu3)HU5g;1Ua?d# z+cyHtl-%W$J9-v>fSd-~6y_W&kkTH`~Uy zaQkLk>$uxD+g8WfzM)}s`{r#tMkU)fui+wHr5eii4MUnwb~@WPwiMepEZxfX%_2}k z9O_JA2RKK!Z%6>GoQZAavVD_@ydXiA^*m5Kw7MV5mdou&tViAA;n{x9aS6uRFKd^4_zZc4Q%$b z+!C~qml-dW5t8Cd?U?Eo!gi>eXy$nL!O0x&?t={y)%@jnx83I$j4glr zo(SowkW5s_MpOO|u=PLt3@rY{jWz596B9ySOVj7GI}$HTyt%+Du-T22y!p70DE9}V zJZ)HQr=m1dZ``{QP3iWhO!+xvF_A2GQBedFqI`&s0;1S#;t1dkC0-*=vlNKZMMOC* znp}pG0?W(|#HljuE`C=m?Au)PWtW$Ob&JPfr`#mT5Rg`cziJlJmd292puutxAqC2tYI_^X072+ggj zxMWF~(yc;inNZ@dQu>|7=;_jm@qHQSa)%6}M{CeOhtsFC3Q&NB)xI z0-h56#~ggY|8Wn+3NW$l&9ve=K!?iv(R8wf^#^@an3c2zmu* zzIl6A14(1Dh6IzfN0fjnn3OUVc0B?`+R9a|dw02*!)INbYnP--a_Zo~94mesHb?d0 zsAIz*>+hcw!T9o&+ixb(te-v%Ugld0g|5tIYqUrM=^RqP+>Km;e&3;Hn>Xy{FF>cj z%{8ak6A83nVx=t z`fxZO{t|AYS{3R;4OML+s_F>76T9+E)hH6N=tAU-SMz(w8*h@j{s_9mVzFsWaEbO6 zd7Ov8PH{`SvotLaIu&dw_QL%KZp~n`AUQ^*5Mj1;&w@w5-p3xdr7=!v=tEelSDzpE z@E7;>Eww2^%|06^^5vh+y6QSLDctS({SY2-uQ8-Zk;lBm#q21U`p8#`k95HV|D1!Ft@0STHh?8mdi+k} zjdO)F)#ZMF;A(*3rgve?tW>87O09oy-4+2u1fi6{~&rLR^+1;0_f|s%mof&T7J3)?u7A}wU*&pmF;h z7J^qw!VODL$R?B$)odXiUnZ&oYtuACMj1mCT}W50p*ArQoAqxSz^Sm1ith#MeuJ3< zMLS|36_5PPShufat5&$?5bqrW?RiS|TdI`Nhg`AeK|CD<{`L|s(enaQ&{urDJl`^x z3)#pAhW8rCgerNHyrl&iW{W9GS{~lyPHqjP%$jm(ytA}?DQRwN$CDSZb=w*vf`;1G zM3>|Dlow}XTq!>h9ZC|LXqF^4EL(zY#0M#$8ICVEZS48}wvBPpiP;Kk=qhU&iW1Fd z$(a8ghDLhl7NXPlvROz!xx8m6@6K)TKG@;y8Qv!cye|iDBP~MxTj@W<%P)W;mVgv0 zK!6x4Q4{z2I?vq)Bf7XtRdo-G+~0PJOY|F69_fs?Ab_C^n2E4E-aDr(f| zF^Ymh(;ylKjZ6iNg0u{ZS7TFjS3||_uC}V0!8o8zE1kBL7)dbKBxJaWQxY;bM5E#m zF-C7N*PD=Nyd7gqBMvy-U_|Qs|JPdk)H&5v#(dv<@AvL|)DL=}z4uycuf6u#Yp*?= zeZb^VR0FB_l5oXO4H^bbkEN59N{Z#+TgCcH?rP+KnEB30O&zqlv*RK_b*<-LD_#5l zkF@ZSy~|wT-=KO*;X}iP-$yAxA9(9WciBlMsviTZsBC5dJR%zzobZKDGJE#|{4KQR zfoKR~)~Q|fYh>?JC!1*c1>F4?WokY@%yDLsVG`7I{D9h_*SR zcR>hRG=*_yTly*;a+@-2@^Fc+(xQ6= zqwHRbzNyij7VXjKvDU!PYILeaAJyn$9Rz!SqS3nWn0O;g>l!-zujHX)5GoOv)&=0& znbu>!Al2z@1qrn_LxzZHC5D>T7_!!OOoKEk9+IHFcY6D-Lsl%ukuCRXNO#!>-$Y;7 zr$6t&9Qr1n@#4s5ay?r*W&=+eZ?QgeHnn4cK4Y-P4RiX85$KNO#&~Da2#EQ z)hTJ)?QM7h$O8uQKmc+PGw>l6Fbz6<+~pqOzrAa^@v|$L*ZI45YVIU3ra2DSJpy=F zU*Pr!SqprN;05Ai^%LM&US?@fY0(os!uaTBW~{G%g@L_6CCWYptpR&Lhw(IHe$Q}M zzi(84DsBKF7A{a1wJRHKV7~(xG9~rn4%D0>JiJjo2aNt#ZidSv1oDpd;Ywbbytf{5 z-2Pu^C9rq2m0QPh@m{S(Yc+bVMW<*qZPBqBz0sn_Y4j$Is%gkEt!wCpmsv`O577ns z_&ADp`uN4`kPqA2bE1>Z)dwO4_v}C{9#<0-nJ^t z&I*d!F^EgnM5AB(JE2lG-@uLo7#OU#=phZa*7Ti-wq_Tb3wPY;s443;Fpz&(+Uqti*DKK9M!#oKXG~ou&@rFz5@{x*C z1r4gfEQe9dZ3rNH7LCTs*N=DAIFr2KDl3BE_b~tT{+gA>nm^IIyO{?gA+)>h7MjZZ z6lofkcQDrX;lBV-3EZFrHYuji>FSV}x->_Fb2UD=Xi0#SSCE>29J?$@dD#ZE?(w|TXZ9$I-X78t#(*wAPd$BGY0he0O%+H z@qU=wvGCVeF0 zxJqX$2tON6Z?wXstpV^932sJ_Uo&bP@q0aOp4*L$e#*u_DUHg({7M>Yri#^PRQp`G z0^KNsj8X!uz%#%_+dh)UJWLWDqYJ}W=L2iUBH}q|t`Fle(czsQ#yf_1J}9%H9K^&h z#D~YSCDzv@H7h-Ws`t(@~_g z{IgDg)v8{LVta@9=D61!kJ6>Fw}*k^1bXcl0=4ftx@``K{MKgC=K&SbH!V6-qn_5R zcf3Xqvginn9%0cV5Z!TP@0X15U~$<;S>}gG1>sp1eM6!q7uF)C8Cr|YO88O(exwk1 zLm2o=0M^bweP4>L>|2KR1ufFqo6l=>cNq747SuI#=kp@(L&JW`QEWgnA=}|fvJJ+A zgckLCY)@iIf*9&I4@Q<-lK7J`us^|Rf4ASk-OTQ?otCllXcntpTG!p*+07e~l`LaoCplA)d{3>yxc>p9KP<{E-}LS2QhXxr9s?mJR!*$YPM z-A_XKelU^(?bs%~cPmHhH6~kO!N$kED=`a;>|Z_}sWm(=tpm5#ceLVCJCN)zpN9UD z71)jfi-_qzcLL!|ROQqb$re)j`nq+sS5m7wie1>HuR$a{}B2u#Wu)>oL#7< zD!}aoHpgB>RHh&*z^%Z=I6E2Nn5HQ4B@+q;FDbAwWSl?LDBg3FEB<^^%#ZW=VO`8@ z*WJYJk_nkA71Zgbqqy^e#$hkuJ=bP_`ngaf`g=j>!n62IN-B?1RarI?NP}UrMx&wIS$HB z!tAi;8fWh#y@)2B{f1+tUF?3@m>VG~G{G+cU$n!neTf}*ku)U#<~!`6hI#{0T_aPCyeEj!srO#`Xk59yBLE^_KXx9hMPi+0$3+X_4E!628f^#`uQ zE=0@iXvW>WAgLYpCEc9q{mm!B2!UNYo(Nnsc-!Fa034!@&wnkB_WElkUAeXCjdd#8 z767~6T496TStCl^YxEX?Bdba!FKO=V9*5O}!c{hRNAqFm(v!LPkmdAlJf5UCae7x} zJpA@>rweZN0RrRd0~aB%g2_N9B-1xBWBp>Lz#WhbS$%j6?S<6`F6L?~n}1)WugxDv zeZ+?0RVAE46;!?L7#hRaB#EU*cRk4JU?F>v1bPp3m)=UP%uLabN@L^H+cD~6gHPc= zUGQGe^{9DX$RBklph|uaN+^I`7F%@9a1oL18QK92>9Hf-HH#7OF^m zInB812PQ=34}D)0Uu3zI-3XIwg5ooG2+-B;79$Vg5}(3-Hr#vmK|PT6p7oxx!vfL| z>9!i~6NCJ1edtir#}^NE?Oq|Sf>Q4u+MMU*d0-Xr(l!bu4KNb_3KG)hp*z!Nx|ZI~ zOSo~_uGC-+l!3OmpJB#{+0{YW!Q=V3vz5xh6T*`L_%lKvzv}cG6AK5$-q*DZZ6*rs zKf*%$HFLLgtR#EnZA-^$d(`P?1%-+aEFp3G6k2PX4Hp2ptx(E6Sx|8KA2Z~(!f-N% zR3t-_r75u|$QU{ZuE13@0CRiUP!yv0xGWAUD}<2-o*d@&IIW2g0@lsMVpj`^eJdJW zorEbmO0PpME4Jf8bXmC}nf(sr`)#ebXCTUA%`sY`W`Dc8h8fs4clq9!M>?OP-tuB! zhxg=K9BUS|eh5j62YiJlZWu%~y&kodD!}bPT&b(RSAst%V6>85YF5=me1^4BM2O^ogYRRd6;|^H0lQs353Rdh)uS!H5_0; zr#e^ITOTb}N>`z`ve@pj?-=fD2TAl9i~f;O+Eg$tI`^DrXmk8f_$k|Ez?&3zh)MCA z5?#MhDr|O5%-7;S&`)SWdi#U?>$SClgTEV<&uNj1f+F_|YryF$0wF344G8BRtqj?D zir!;D$_=N-8do123w=LR3+~^>%|Dm())0*3Jls%Ypgl-H^lFPfi>QuI#V@XnqqM@I z0%8kY^EP|J3vF*AVJFv+@qN?3@yl0tS4*&dxCGrk0t^*LA?PzybY}_Ey?!-=uDb<; zpAsM$e7hJ+Y-YdrHI|QdEN?$hCZQN>NC0CE31CzurfA>wx3R9U7t9~p-AM+eu|A+k zJD~x{pvUlGWUL`R&1OOnYzJdT9aHD56jqeCU(tswDMpGT`G*#khf{Xq)W%Vxmyv8HhESAai!HJ3H~XU3UlG5HCv z0||lrIP*DWO3Lo-AZK_dgN5U_1^ru}bRcx>pijqRx&pj?X4#_Ff)WKGw;`OKO}diU)oYU%n2FB4|%BE#1*inmLw zlx3R%8D1rvh&U!mXR5g7R2{xtn|ejKJ00BF@b#8$OC<+!_>z8FvBrk4Xt6$-P`mY` zQLJ&<_ss%~0xqHlns|<8w5wydz|&3*4Y$!w1)gBQZyg}G^DO$3L@|7cT8$SHViCXj z9~{1>Bcc64{?*}YlA+y6G-p~_WKFopE2PK{Au5J*dN{XE8LBl>i$Tf_UrQ|Q^doin zV!=9mxty_pmf@?@K#!FQls#(EgAf%xDDgFvZy`TFd|{O8p}Js{Vk2Udl3@LC1o#R! z{`MK2)^9?pX#dYnK&P}lZj4WY*}>ed4q|q8ynw&GFCU1taM>Bg-3WxiIR^&l{kg+} zq3i&)O}+EWof@BsIRoT+f@MrZ2BMz~+pt4X7i{T+8qEU?@6J8J7rZ4->g}2HObNl~i=_niH&06Xf(Gd3gvG!pq_o&W`&? zMP9_OxGoE@-p8=@=@g_EncNW3a7f2i#ElMb+O3DdzjWWzPYmI46g01n1E@gR0oDY_`s)#^<*V7dWq7BTR6|<6idK}i5vR?inUSv z#U-7c@(`-xhKhUElu?h@Y;GGHPRDUSCd-?YEKF|r?AVOQ9pw*Ko``zyM@wKuO_2VG z&HG5a;yNEBcI>lmN56HUR-RN@q?P9k0m&2LY)acuH0-^y-Sl?FMS7&1d~}z6WexNJ zdhwNg^X0=gF=)Fx{HqG2e$r?6lNQXHdN5_3V)Wq%U@wcWsw)uW6#pjoTe@Ho5x8A;*EOgCTS9AZjyQ=Q* z{Z>~M?{@v$OEr(YIv{j0E=TmDJc2(RH>*9xa7L;wqNG(<9imh`W zcf!*ny#vQQQp2=IdMksc!^b>AO!-_BQQKqdpi%&u)WI56T$93IH0t^76b(nVT6x;i zyNzP+jBUW@x;F5mRv0(D?LQIr7vd;ZY$J}Y-R~nFtZ96AA7JpqMd5K+_uNA@7I3C^~YTKyPEDfs5ZV61slXN z%}-cB(L&(p9X_PO#<(BmMQVaOpiV`0QO&p>Ohh!}pBojOeVd}o{oQ3Fu3?#5db46G z%TBdu+W@fVhDz}oG(&jmok?-QlL)7s!nCfkpToeC-cQRI9r_@nZ~)Oi+$TMIw-eH~ z3|;YMC{HzUPyYY|6Te|ngt$4^0F9;vq(E}L*h!^qGsCw40M`xglj)a4MJHalTKG}E zZwyM=fKsrW1X{zqot}4wx7w3!o)G3!Va$aA=EdX>OGwh=J0>&0ay6Nf9jJR1t9M*~ zSD{ggAdr*9*k#7S>Q)mItBFE~622*1-d})@v?q+(EBzQ%=DLR_z^v8zb;=U6VP%7X zd}uUOjmN@dZwR>hNfo*U7y7zfSAFcp`)mgb?2q;*R5bmsW!fAqVaw708y>%X_hP7)@ zxB_EBj7jzWu4t-z2Zzg*ZjSQdiBDd4&gq%n z8Qax<#qNEwm-27Lb)f3uX+U-~|E|d5Z@=t7{OzATZAW8G*TSBfuD0HquGr3C=WhMG z7;O_>bMP6Xd@iLu7q)cA>>?STMj<;+DUz`mTQNJ1Xuo0?KLgxdcBa-5XEyd|dxolV z^=q|ILyT)riVJf0W(n5choH0jr}$eitl>%&BzoENo%Le3C71WWbw^nh7QJ^5*EIEm zXc(M@D!bT;ny(FV4cCdg%cdDlJ8`yjY-0iVZGT%jh?G~c=I2O(hA{JEFUbI2O134O zU-G+KPxkr1i6rAQT#J4gI!9D?D9j#wI(+zKNQby*t}@-i0$w?mI{mviIjF=vSBV_d zXSrQ!Up5vC1eDE5RNAhgr!WfL1!AynA|GFbCH|BXEF0|0mn&ZSLu)YoCaI#rB;O?Y zVv^rPN#^Z2+5osfm=S=ZA!E=#%*o=}UMw203Ki{~6F}ZQh)~`;F5r?0Yh`{ZmrUT% z{|-s3ALQR-uB_6Bt9W6mwgs+yfghwYSuaY|?@_p-1Yg@93;v|uuNdJqo3s29iC|8W zcB;7M^YkYQ(*6!J0TTS>U|8de`o-nB&vnxuyfZL+uar0z53<90eYWkb`P>c z9~8rVFMdG>tLcvQ1hbPzxDVJB>%q%cs=Q<({3h1W6=-R!IP&{E?)2HhT@5uSA2Mt> zO3s$`z6cVcqtO~ctz*5NSG){gJ=TjqLr(x9_enY_q2i<%a&=PE8GE-Y_U@$E%UAB( z6?+-6hcBc6rsB&#TVlKL=M)?|JyMB>mU-3k6l}Sccu*7OwbK;1r3Mo%4&d?9t@TrmaY`rwd2Gf zZ=B1!-Q^tsz;9UuEr1KKY09jZYHja@D7qHD%=YR0oyfblTQn`UO`$Ild|M9h1ayHK z$QSLXVqKF5!Vf-X#r|vsxi_l!8FT^Adm6INSEIM<;Y!d;oF?2YiT-r&D|X^xx81wdTmYV2(7z zR@c&7+hb3I>8Htb#SQhamXz0je4aJ{{h2}r?8STfF2}@fT<*<1ZcGS$5m!U@ErU z_JftmY!4+|anI!8+5Hu2F`PC|(+&=&`I?qn9x7uH(?przoY9c)2u5d6QOyv(u!!Z2tSoAyX zshf7uji5&2%4-HS0||kp1<421r;RGCiPyV9sXiMnX^m3tg}?T=r2jTVf57`VXo$DAm_iV+&G9eAIdi^c5^BJSy7#H)zNcSbJ`rzVk#m5jH4 zAkEhMDtHbJm-FE^t%UJd8+M&~$6$1ftwj+JLuy{{p=f1rYKv>nAW5=ukA2softa#w ztm*vhZD=+$-=f12--P&mi2H~SM|?BlPu6tRqWdk}+BJE6C+Z%%tG(yF&e&Z~#P0Q; zh}{E+I|edgmv9p}MX7f0+rJcghktsD-r=oXv0GO^J+QBL_$adZz1>f0O~QoF2Vt38 zi!*1T+fLhb_*`^wriJM*{I$-qbx2*8FQTjL7$An@2S?&S>ulR4 znE!njmVaWqI?LX|Lx=>q47ckpv}-qp1W4=P1#q?5oz&&}4yufq&4`M7V{bP?=sq5H z^5HN(RNT9j85Q?#?))vPbs5IWb*wUkwvY3TA4Oe50&9P5GUW4QXWQct(UZ6wry7N| zU-7t?9S;TV$clip>?eT<1w9wMQ)si$Th{eHCawE&`xP&jXZOY5T-$5riR?H~JLC}T z4YbF$_3M2eBin@7w#$3L(vzfcA_#WIdV7D2jLz6=aNOEA?}MSREB4x?*v>1Um4u_U z`b3zI$w1rw1&9Q2Cj+Oqzq;z3k3RD1G5xkay9)y+9Pg7M=-BQpu@?a8ftfQ9^sae> z%)9`{`-MrdU6;R_FXGWmsH%Si&s$bmV`$aFP2-)aFfc@d~&jsWyS6d))ZYPGo*KE3AdehqcS zKD1?A0boRrvS^D&kF#iwRRrQk;TfR%8e=RQPU&=-s*lPSne~DOvpv~lJS4o^@P7oFx`Oza)IPQe!_EhiDT@FFaB+WC`s2zj?wRsMb^HpW@EaQD3qtuHm`l?1Rw&?R3HJ(%} z?iFbbt^FPu@AwT04f^usl&dMmpIea+?lypgmb?KgB!g* zds!uQVtMyc5}{c78As1uFJgHT2oMGX-3st5e?(B+2o{I?)c~Tcfiic^8z zm3qHGM(F3U%y|@|N$O`QO=|%Ol~jwA+(8Ti{{mud-vy5Tjo4TlMEd=F{X<3bIb-4b z2XjlNV$JIURd&85AEunOhBjI-yk0;-%n$5NF8^zS1j zU;6jCK;!BpSo3%vOPLoguU*SKsz`Y?q4Iv%!a8l~Z3xP1h?IAyO_odO@rfK5S6=+q}m^3peom4`S<+Q zN#`E)Q6OGt8DB#NqF=V?4H~`IqE~5jx7Jztx)6M!UEck+Ncj~M6=;l45n8)k*Q^yi zJt+BfDY=6fl)#rDRBFu4o4JwR@f{?$KghpcXkZL=-%!Usew%;ThiP+@1>=p z)j}=CP^Q-08!pkbIgZ=yUsO{{40OYrC11M5Q{bE30vXaz5z4D<6&>G(hV;(D85p^! zykqB2LN)|@;H`QTk3;%@TQ7X^WvADllH$6F!=|_!s5+gH20jmPPjtNLibO7W`fa|e zHd3k4AMrV6!A0(U`P>@j;=A9Zjja|0PryCn_lj5!VAtnikLpWlMLu^AMb_ETqm&qs zQnjN5q22{fmGcoe3Tg!mo**QoDi^Xra7Ofjd_`4PC3n4?Fj>FzVa)|lNRyASKKb<% zMUyGWo}{+h`ae5C{$9*kK!KdV{YQ!sAAFlomC|!B(W+H+$XyON z)CMj9!)={i?yjC-Pe`PM-5mpsrP@t^6`L3AiOX;b6?zu{7t5RZ6sH{0~+E-bx7ZM`g zAD}@(a%V+D%G%4r3TSsWhl)3(tj(WO&3xp zPdnRSPjT$e}~9`WB*Mijl?yqctBrw;#0ag@x-Q1S=w&9jbbL?ZMGi)q7@cGs3C1EKn zYOVQ67K66_Tc8Q7%Gt*14f_Y;I>ZdqZV*wwuEINL(m&&Kj%gvU7gJ-N=@CB zyIk$J{~DbxBFc%4(o!h@Oe_D0t4X6{D@oy#X9(1d`i$kL0%op}9$YrrGR{K==*+d~ zOpUf$bi79IPKf#{Ux$D%n3nHtCJf9r}w=-Ix!4XyFv^~U^XNW za-(>4GUgoQT-_*wLEaw_n)kEq1D>1_Q%>#xcj`tJ!u}Zoio#wgH3?r%9_q0Vh&=Jt z$76#Ydv(3Cf0|=|$82(gZT?}b@M6| z6VgpCFJh4movY%Wt$gCqQ;BVUq-Ws%k6KcHmsA-f4RA?^@4q#_T4Bd*xME1$oog%c zh{K8+BXLWq3{v`A%HcuEfVGw31rYGq+4gSd!kwLSUYm|JH>{8GdbmS6WZ)#v{kC=u zL}7hXQM$m|7m)>aXTPU#zaln0iqR-S*}+C=j44IKK@SRX_v9mwRuQROo+%@sBzKx~yw%$%0 zRp^|9ZL8SMEnZ?}Yn)H$PWx=}S{nRQEH-e9H+IyLRTdkx#mgrAOC;94h}&MhG>0D6 z2s;Nz4EPxCu`Bg2hcM?An7|-spygn%1y=-xa|T(?QOx;qI0t12HL#5tTsQ|Oha~5C z=3E)hIoxuvhl3@9aL!SdGm<%Hxg2m?Tg^i){jFj+8LAtVCpwUA6pSH{C-UHMj;q+| z%z5YUtTHwlB0DiEcu1?QXG?51&CHH*v}5?bIzH^hZNq*zx4fI(Ip{F_x_B4d8g5>^ z0jlk>-8jy?yW+|x)`geYuYPSa$l?6nq8v(=t5a(_*ViC|W9gF-6!-}|Jc?9z@#)<} ztHJqrLBMhrR;4i*NYt*7?c~brLTru2Rzn7Bu{ygM@h1^SHF21`69+Cj7gCirB7Pg< zJ&5;ik@ME9>-H0M{3OvS_hDk}{S5w#cRyY9U=8kKRMGgDa^GOW>`$07!T=pL#I@F8 zm;(vJ@%#RL2?I|>U=9t#R1oF>!t6&Fte*+Y+Z+tF&QtCa7@;F&0YqT_Jq#l}3mqxT z@pDHQMtGKbNm-7cYr`*`0h)(a=1l_Srd~=OLZkH%%5xwHd$FV3vO|UAP4_b$o7H z+poCU%MR>{-Msy~1jYL|0K0!OpC@dsshEj#&#~KZre`BkydBd;>8Nb|;1Q^%>fHq0 z3sDBsR6C*&&?Kl{YDOvI=I`CqAaiOhzjzaT1?zO_s;sn>@0}AL=C4RLX6KzV6X~&e z^XAT*=ueBcw4}0rys0TwAIHL4Hj&BtOWGP66F9WQ-vT5gTbB9`)d#&~eZr4t{b8A^ zswys8@Hc)zcJO;(op4< z&u?pOO{G~~6-;KL*LZ4U!mA$FFrN6nKgwT_ZcC8t+;nnjvL)W+4?k}fsx&M!(y!GA zh@m2CYCHYm9+T_(R*;3^#%usVQkJV+1n0hcHuOF#KKhcs+r&?D9 z8r7$rti>Im-HN$ z45+uYP&j!&<;wGF6Y1t;CWBI;AT7y6gCilFwFbEvKMti5I)18^TxP0BV@9M=s(kVp zRIE9^3cVIAEJ;9~&8g*J0d;LiG@-Mj*Wyzh~g4lkxph46Rnt0DTq}{9GPC>k8VyhB;%vAiA!4I>E!6S3u^1C z$AJFWQgWT>H)Z@$O>zIkVHsRVb4rze9`vYjRj2_oYTMA-U@Z+zhom4#G>%r8{Evg^ z(c|mUciE>2$!36 zDC^c#CP}ptn~Kra^@Q>Qc&QXKr4WqaVZ^ZAGkYZT**qUzNFTmLQK6@_EvS_%5pd;w z40J|X98iJb^kJV1TS*v*HIDaYw_%-U|@MQ%2ijFU)LQZ!G=j5n<1Vxuk zHYZYTS&Y{vd+YUWE$Kw26iY~Dv**m6lrYDJ4*6ZXthoaR};C=4G47m_TOPgxF^ zE)Hv33<2hL7)BU}0JjZ80lXQllRtdSs9_Bw;Cjw#SsrgnVz8EMXhoH$kckHNdo7OY zW52Ca@yGKaYc5#;fum zUg&RZ`m6$*IdPPH_{2>Q!0Vu<7bnQX~qF&pqv z$Y_>O<&DlZw~kI_TkA-xZdg-86%stW%p$+J@K|W(z%Jd1pirbqcSAaAmUeuZU6Fo6 zdg%7Bm|1XP^kT|zVx{DX!A^+l58^B08NVKbNCLipgO`rCEKQ`n#>*PLmX;Q;38#?o zL&e2|XpXmF*a>QGUaYH~;*Ruzj8VU(WhDDhQzQD~3{;-=aYhex+Axf%S3;kGqsFR` zRG1S;#q$c}A$WOh%FmbT8)V@1PdLF>X8cj3>ftA35=1!zGSgoOt}zKusLCIeUDXPo z%)gx6`=6nBLqMpEKdP09eejza{ZRocqgqiJ7E?ahtAc$taMw=L6OHkx|S9y7`&h}!~gV-^YIrZK7qxA1bS`8p8?gj@#Q#QJZtG6bi>=SDM$(v z5zg6`CR*rY!Z^_RZ)=6Og6Adbo04cNjcmLbmOs?~&}Ji!dA_#71(P+bRy*zWOw+jM zO_@4vdThqbnptO^J$ueMb8F9?H-Evx^Uhy%!N0_p)Pv~KWy#N7($w6NYP}T86K%^^ ztXy?j^_a1zj63zTPmiB)@@Pk=RLD*H|0%!Epb}wTDZFv`&qapQ@c+~J&&3Qb9 z{(lPpkHi1t@qZZppMd`-;{R~`XGcB>|4+vMk@!Cf|LLl+;kiyDb1Q_W;D4ydy^nh( zAQC9|M)5Z_HgncFVh877b#%(in51f6?40R+b84}oGHux<^V^zXk{OxX*qBLV5yAAF z%Ow*fHHi7ktE*1II8rXj4wIHJjErTca&K7GY2%QdULq^3Zlnj8dN=UYf|0)Hyb+Ee zR)}e_q4Vd*)Aai$`tv0+45wA%oYQG%Idom4m)cq!z5P_^T_b+TT*RHmq~u6H4e_P9E5dO zvlYzJk~`2yx6>1 zGiJr6yCR%wEx~rmY2&101pTi_oS?ouMIxDF$_wb2AP=n6KJ~8#!r-Hz!7iHWngsDrFaB`l{7&>f_Wbfxf+#Qeh5b^+c+?15x z3^8d=f?`!+orXJ(MtBZjDt0VkF(n775F}>3$|m~Jv{W-Dx!GV`GKCaAMH*_60=p8< zU!s%^!YUf{1kKc@b)u)WH7pXRnH7dOGDe2AK!K_NE)7*gj(I7$K?;z8y$Lww4u-lt zejn}eym{EqK|cCs;g(e*8yC95;dC1=!XgvC(9Y=9)CKW-#E4LbLwk+1E3;Zu5*V?( zu#-pPk$$lth2=ZhY(#Rgoe}sxw3EfM$k06JLzIA7$kB^=T-$^R$q&@l_febBY76Vb z{ZB5OtxRUJ85}OaK&t&TwD$(@lxsRB3qGkhirbfhGJuM`$yQl~Ll!+;SvhUP%34FJ zS>zmTfAJF{FwUSw;jB)ij%_S-1CY;~wVAq1L9Il(4*G_l7mIcUZdOOi>jS4Ik$X8- zgg4EcU85hkyHZdApT+%R)I17@br@Jdc&UBrgMzWX2-P6~@Cy3@<{$xQT<~JGWb0R? z8^XH*nn5WDS<^dWf1baOe=d*n|pi6(^l!jm* z{zQ6fK*8p1qNR=Sx&a91>RK_{HBD~kBv$0B9dBZ-SD7X&SAE*iM2spb zx1sGz)+&%|UQ&jUm()nfj1g zFcs8;KqNc@XNDr{uRJIMmtsDrH`9}8Z@O7Hso$_sGO9yI3C97T!T)j zL$hmn95o8*L6$wpy3Uaoj%yxPbrM!FtD7;TKmEr*)`#&kXJrePg`IjO3g4(I~9@va(yeJPvy z86ENteX)5(xGV#3CCK3mJBK4?Nl+{yzv~suE2H%FWJ{zj1@x!$>HFC!vA!WHpohUb#Yca<91Ptlw)>Nj^SieJS~Dzl%jTJDS<4{&8TnS z+=FNd9124H$(zB+H2n=V&u;w7cTZbo3KzrX*DVS!*a23Jsq$@KMyuk_#5&4If4*!N zE|Rv0j<5OkDeEG^m?px(pTPdJ9o&EieXPgn7;NME@kZ__p#zGwb?Ozu``9(n5*OO$ zNw~gfShD9z4~vgnMO3jo?1eZCdLVAj9VP>7?7&eK2W>5({K&ZkmJ-abwR7;8$fy9t z?V26y$u1Ff0X}0U-U#0X15_pv^aIfQ3di{nJt^1MgQF3e$&75qap^x#*G_rVr_$-R zR=4GZ6I*Rfy6}NkNCuhdu(pC}7a@H4e&|W_g!=;dJJlws63SR^4XPQ9rMUor$aqhi0C6#-nzr zIev*QnTrF>sRqw`;jt>B;npQ$8pk{@^HXnoIk=YP17BB?R-w*NuVfudAS-M z97UOD2TL|3P*~LN~~Iv!qKC^7LW4h$;`pW`3v@W4pxqUovq^dYCoYPZVC@gO-teA$>?byhclNx zyeyt6v2|*YS(aS7Y}BPl<07ch4AZG0KjC9gqwP<$NTorbMBtWCt_ATixqC{cbRY#f)(C&lSzLH_T{=BO7}kL;N0Ap{1Yp|qQS;``89n{H=?16za}JDTDt(Fgr^<(t4mmn;dBX|q zS{rOTKsP?>JsO5Dq!5nnO#eoFaEU)|`-oJt04d9^@G zWpBk)hJ}lFOA}?2{3P}p#398Y5gT9FzAy@WKg`(|3`?Ahy7^xUJ`Cp(e5nsYo1T*C zlA9%==jrBh(RWGUS@A8G1baku0u{I)$dRdi2r|4pQa+z0)4#<0O5aE;9-(+eA6hC3N?Qii1#xMShk2`S&d0Fz}7G%fUF!JwW9$B=@SZh%is z&3E-QDXDyK==ANa*kegVW(!VJ@n!??u@kKN!a;#sRos<0R_27Uydvc{SxI-AIhJU& zyag|Op)v4pb!H=jHIVU(n#EvTc9IB&W`m3Mb!Sz0N-dx_3-7Qs;=FPagbG!UUT(mu zd+)KlRy$!>RoQd3W1C9m)x3c3;^sUuCCe|Jh3lQ4#Unpp6s?L5AaLjxecFwk<0Bi) zNvTAm9d~gq_c{EZWZ`HFnRZy{nek%(XBMO{MqK4@@1J-VOxC!2&)J=KcITkanQZOp z{Bqac+@aQE{e9a{NE#kZfmqjqz3Kmh_e_=JbL1R{BadzfQy$FcaeyzhBq2+rq8Y)M z$J6slC#u)FnwlRILgR{pJAIm;<(iv0nzAd*#+I6LelObSR^=O17R4@+YmxFnRF^m7|s&gC) zj0aa51I@+GS2_vv55D8|=@iCuWSM;}59k`-1?xnpv8_}5&lm@tV5xmF4-3xS{7)Sp zO<(i&7;EZ$X?)tUI6CjxYUm?H{}_E6kr zw^YViZD>gQr}Wqr1b$pO+FP)A-`0xBF5YqHnTirig*e5EGpt8mIQFa~FRZbOl}8u| zId7P2$Vn^Nz2H2-9057au`ZRl)BSghn*VPox-|Z6L`yrm7G{oyW0TsPWd5rJ!yqAKbO3|dxZ>f|Ka%G6&usTNA+k!W|I#KadC z07^HW-HXAF1NCt|TUCbw$^0s+mZn!Y5iCda@zSTPm*bUOh%B?Jc}WVh%}_UW;_j=X z+NQ8kZug7x0-S1*RTIp|G2poO0&OoB1`X#lT5tyf$~v(j)si^TU%~qiaNr87T9{=5 z7w&N3Yr~hdjSkv_>$j*G)eEmWpbwA?HA2jVRow}sXp@-!l&~Ap-14e|>`KV`iV4#8 zC15Vl9WkMXFNOJzRo{E*%WLufi?Cv+jBV!MQ{?ZMW^CFcTHVZZJJoy~d-h=b#hDL2 zIQ#8d3w^y7%8y-!J~jbo!vfiOvQQ;2RY#;#?gduP_vYf{^_1DOy#=_OgKwz#cz0&X zJf6fpTTB`fa29+PpytQ0j-?GYe;Vg@+9LjNAj%3lR3B5jh7oMJVCJv;Kjz|35=H<$!h?sOjCCLV$Kyb>WK}{&I5$x#*ar&TF64R7;)8qd;r~+>^7*6w zZ$tingPY|81^hE+>>LE#QTj(OFa^fc z$yr7;9hg0LB9coCHfe!rM$5uZ>3j_*?*8f1mUgs7&V|D1;`>n|9e+CJpkCoiCG+)y z29zu3?yQFtYTJn5Bw;X`R{4Pd<1(Pifd$^wr4+4^==O2h+};!8`(yTQjcmDbh_f*x zzZ)j6g@qXl9UZe|8Zizd3rNr^h@w1+hl<9GQ?D@qV=|m(g0oV=c46=W8wYK5iTb?7 zCRtdK!lCT6yq{Y5UYf2}iD#oEI7q;o(80vEpdI~?Z^fjj_art@-CL}f(kbAOS5R-M zOQ_xwFHvtpbuWwP3kjm^_`}Li)pr2&)dTcLDgoc?z(_3|=a&HhkJtM2ZIJvs3_#(K zHcHM7nQr4`xqF>OAHBKxmsNQ7+1Bq}zbLRjkRFD=F_gtv+zo4?g=M#@e2wRd`UXB0)31y`i7PB`+{>xO>rI?Q!0T1xT>*^;n#KK zFl>o;QB~s8+`2a3OXFe&mo=?Nz}mn$6~|Nv6?<_Nud9{JV+ph51sS^A*lsJENRB6XCg(96&auDA|Z#y9v?Sdw;!BCX!CZfx+YI%K(yw4(d`e*Bu zen$?N)PR@PFF`_2%bwf@Ja5YE$!$is8R0gBt5@#Htwxw!wI{a|Vg2QMa+Ujd-fynl zldDF!-OX}Axz%1C$|;h7KA$yUhpO0mwDcM>w%B( zp|1cRVa*2MBm4uxbqHVmD)140@HOBg%zYjB2&a4-_;|TKfv_6kh<^h9kRdYUGeulxp4?v`sH#95Z;O~i}0NRx!lbNufg}@eu{AFz+7${!f^-W za=Q>7J}8$v97gFTgyRt=56a~hA?!Lhms^SOi-+WL8xX#Y@IHhG90q)ZHw*_p!bPV8 z{{Zm+8Q>#4b}H}@J~IRO2)EA!KEfR}z(+XcLf|9(?nS^y`0Ntk;}U~)N#G;Az6JOQ zzl-lwtVDQA7WfDo+JKMnI(&*^8^S*$+=cLhRltXDJm@muBYYL%B7{RO2R_0-UIBcB z`&p#27}>!<0w zw_#UyPwoT)Oy5s1j>jYKrkH$*_8srQ${7b9epbZ+D+aFi&OBn`Nv9moYaN8{MF@LS z&`BoPkL6|YzX$1?(dXQcWnGW|m$vQ6{k=aPVh2`U+ke{NeFwbNA1uio5_ci_Z1nk5 zB)>7pe;WB;y$pQ>x}3+qZlJ?|4aw#0dva~C75V(80WNRos3o?HvUe14*z%O8pK z@582?NxlRAPTR-j&qn^!U3+qWiQvBw;5Q-ti`{#27Xv-O@4t}fQorkw|7+ym6v^)l z^6x_alpFTsZjIFcOZoaE|3TQcUm^_X57-=({~FR8Ve7sSp?`Hie-P+yMSiLBMcOie^1F-4H4)XiY4CMDT^2Z~;C6b>A@?S&#waBju=WDiT zb^9&G(Idk!0}cw>xElG-VtlHvqo3Hg72b5Cw*M8+2fGTw^(DR1q`y#;?FkKenm!{3Sg zgLakHflB%z$Ui?K!*c=|S0n#?_y;$Fd_cedwNe2eNwvs-0{QgQg8TvZs(_J1Jd=hovaDM*}gYw5A|1IRlBjqm&^4Y(~;?w4zh}5q# zs9zTOC&Nc-=jBRH2L@a=gapX{&B(vulUP?dIGq2;!7l%&$R9r@m-}m&zX2}>{6B~M z+}K?1rAQn6KG5NJk^jhPxg7gbzWi?ocJ2`9_MAz%+))ww2M6@WA%7Npwf^D!{_p4O zkNlI*$mPyEC`^COL5}|{^5b)JxkMO$z(oQ5o00$B+Fb5rv{RnHPX#*sQ{?{$UnqSz zl7CN-{~YpbKby<#j@0j+pnmTneiHBxs*QV1G|&$mQON$nVuae&dk;{?c6T zS70yTum7X@`Xm24%W}EnBKSuH_*vwC?~+{Zq6q%{0RLv>{~7tqBl*oi{!fuVp(&U9 zNhJS{Apbe!KaKnsBl-Us{jG2L;ks8ISr@@+TrKOzh!wYHz1tf|L;-&?Z^wrzkEfm zq(8SC`EMZqqA>n|`2qc-2H_4i%!%HJ*wMcPcJy@Q@47OVn;yxZ6y#ro{G%|pIVD2> zq=5eA$RCY4Pbq))R^;D_IncRb`Sn)?VEulM{1=cvKazh|zW&Isz}#t9q@TYj{oDu6 zZsh;<3y^=9Kk8wV>LJVUF~2+G`dse9NE!2jGA1K`CGz8uG8P54WHIu8hI!km;W7q{ z)B;Fz?{BXJ_DW!{1olc`uLSl=V6O!BN}#9&HlC!(i!G!(#oz7pyYO@IpI98Oo&J0c z;D*U>w>Z;!Z!r^UpI6KyHCygP=Hn3-Uu6081^L6&QGV}X8JZ89ILE<{E--&R@TvLZ z)Rezo%g0nhen(r}z~l~PX7FC+@Xx@!#eY=(tXiIrxjTPu-QJ>dA2ZVz%VbIKcV>K% zExtRx2b!QT1(YA}aORJ9GxO)*KFDeP04_;;EPfmI8~DQ|yHbD0*G`M?!F~pR_?o%o zyLxEq|8;*CTe}oetoAi!vW2x4F1E1M!qpb8vv8w@n=IUH;Z_TKEZk|KcdRGBN(+4p zt1X;tVXcLWEo`-LwT0^}+-Tt@3pZQ1)xsVNcUmZyXM=;vPbnY1h1C{Lwy@U1#TK?& zxZ1*X7H+g~lZBft+-hNug*z>ji@RC=aaO*C)fP^+u-3xG7PeZr+QM}fZnSWdg_|wh zYGIFsJ1z9MkbqyMg}#N=7EZRX*22XWwpzH_!gUsIv~ZJ!n=RaGVULAc>c{^(u%};9 zU>vN;6wTP1`2PzDa1V#JcjmNd6aC=}m*D-*Hh;{Rs&Q4-qsFvJbj+1w$5vI38)3;G zEf#9oKHgjQUQ!;GcD^5St{pOUt5|FiaJPrm~rjK}E z(`AhvkHe5&tiGd5q>sa>-49=9@OuEjAL_~9rx9hltbRq)t-9Vza3loYO(yBz&TkbV&O`~@qBpRDI0{EehbQsfWM01*DTlN4Uo z@&WPRmcBTn;Isq$m7#qIe>4wA;3s>u2)ReW^jD}D_{p9K!ZDUU+u&u-7U?r2osiKV z_wz{STjMod&OqRCMG5%pN~Hg*(K$Y*{K(oa==`t*Jon^T?p4=lxw1El#~w>R?+#6u z{Y*T*UV=_J>=(C_3V)w0kv^tGdJO4)ArZvmNFRcJG1>H7oL;2AfCrynIqA{*I@GMt zuk>!Q_Wg-vTw9{tTS}z=q(u5JN~B+fiA6Cv{JsP{_xvgUt)?KdCk9^2(ZP$+IST2N zLv4W^s!G65k@QOM?FlL$*((73g(cvZmPr2^CTPX@S#9(Ws#XEZ*&aOpz|tq&tm(4f zj>pYNuS9zdH~uvjXZ#F)Mu(=z82~)KVCgUXSkqWP1N0o}1TduIJrY zg8sKkq(4|9o#zRtKiB+BDa)Qc9$zd0|8|M=VHih>$)~J@J|7|J7#FHluVgO~<(^Uk zzQ*9MUZ8v)uYq@d3HVD4{`QL$P|oz=@yZhL>q?}5+vqHMQ0d5C9v(MY`UPenWv>(I zk6HTD67Max}5RC;~Gmp(*`;@+lBNEmVWk=3NL3N@c2VX z*R=58#|{3Tq^8OlDLlSt>F*TC^Q{te%3#kapMNtwk+Wi;Gt|;wJzwd|88AGaVCl*8 zG@bqje>`7HI#*e_Lp0etKLP1R6Lkae{$mpDMw8TR%R~!6S%wLkdP2g;> z^zWFW$=L&>f4>BsM-Be=X0!mn>1h1&}X)AC{nBS)#umUm|^c ziS)CO?n_D0KNpmMPa=It|4(>@^X}yWU+F#j3#Ah`a%)P^`Le;^I9nTB_K1N)y&FPH zwpi2A-17UG!4ELU(DmzQEd5uHE8M<{=Ivji|MnRClbjIYXWi1{`RZc!a}X95sfXF0 zEBwnEc%PDVi-dwxOQhEro%3fXgR&wi-;BP-k z;s0)SugB8&o380MY2dvt=@tnE2VfzW^4~H-`M2T3J4(_+fc98z@MFHA33AR4k7rnV z&zVX`&Qu`%TucAG+oYQ z;_#!t>LAzW1g{`wN>-!MAycZ7^5XX)_xqZ06s8~i4l_q8aR z_aByi(rir_0)L&qS1kSUDH`W|lD`iu{fM(PE@!dvSSkK12B7gU-fE@Zm>HJ8tH;Czw&pPve zOzpg5E&ZgCT2a@(CQ5pg24iy!{>!FUauyBgODuit6N)2eY4Lbj2|72GNdGsZbJd$l zN6y6J@m{2Jp1ZhUp8J%+zhL!}vw?vBFH8U1*Oksh4ZPPZz2gi`kat7)IKMuf9aEL^ z>gwW4l6BemQV$9El5JySRlSGHRuW5bfleY_mu;@A$L0Hp3?Lg)bxWI4OX5v+4Y-Us zQx|Vr>A8DH8mg*`L)7u5`MP*I9bZ)^FPD0ayt$>Wp{==j6;ML4IzVP4puF(2F0&%p zm`&q@;q_h{?qfnAFI1-RpdU-C<9!1e7s1D!aD5M|ge$B)?qdLs7lQE{&~@(9Hn_vO z&Rt#Y;k{8_E-e7ztDwj(E-wVW+#8NCnE{Uw3$OoQo~V<1g4&YEXi4GP81jLCW2=!M zZ}!(^Q*~{pjI9GB3=q>~#Ovy2%$qVNR)?1*>*~C^=@*!Vg%$OfrP`6;p)Y-8*&lLrk>g%PrPXr%rpFDH+tf|xL##W83Iu+l2 z&(`6^(fVWt;=mo6F2Q}xfcbV2xz;_NUFPAE4QVG-yiVUIu3L#uD&oqTzOaqyL?TjR z1DL2s6E-!~x%&z0&~m`!y`&khDYbNL9$|uq&%m+m@=4%Y@6AI?t;`0MtE+2DE~&4R zYZvQy15|)<$~d%f8WqGB=#t4g_mZ}K;S0(qvQDJaEvY)*Jjv^k0%QuQtpzWAUJ^+{ zQ?}H%uIiiC+!{%%o3&sLs^l$$_ z2|r?w-iTMVBP76jNWd%zd}dQoAZsPlKFGbL&1nu!F1GLQU^Vw`UN>-J`J;h z%W$A6*>qci3SwOiEev*eF9+;Gs@e1gZG_&I&d~7K%hYuVzBvtr)-Qou>+9D)`7K1z zX8{Smxq;qk--9*Y!p;IXMdVX^^B^MnBl_IPWrqNM}=!KHP zj4QoPu6=P8_QX6=z_@cMLaUD24&l`=yQGd6Pz9OeJiYWaNRSpO|P6N1sw) z|Ft=mkXQm&%zBOJ_n8QH&534+G?FCNOIi|ENp8%lV+Vrum0PpKnDsHn$y9xT3W7}i zim2{_%NAIINNHhZaJJQ}m;21oRryIy>K^Zf)0@ZwTMwyYJj)N zS8mAU;x%(IN3dUdAA`Q4A5GJH9;_vUfyNWHEYv~@i1v-w64XhjHe)V@IyoVyfdWMH zXIi5w#-4AjM{5h~OmPQayUBR1$yOWWSeAXYfy`w%G8)BIqOF9j2}+-vy|7+jMYKU>VqX z(pdolr?52mtS@*L)fQP4@C|Bx2BO9y`i{@<6!1}3w-lE=Yk3&S=_v$?b;>F9i83h+ zhP(@w?gRU%enCyd7aC>8jLQ$|;s}ux9EDkPt&RAdnP}54OW?~8Sx>HMBnObY-uxJ{ zm>9h4c*(hpd~kK3=mo<_0++L@_an`!!h*}hk01wCp~xHiS{1W+R6{hEdLns?yF8vw zCbFy8#{6~#gkghQrf_frGORD}rHqsacKdMQhIYODO?m(bFUimlvCZioc;Yw~aX}zr zIBf-GsQ2eO4BLfYpojpuaZdaRtF&W8#=a5*8cZ=%3qx|$@@DH{(E6lGt2;KJtsu-# zy3@9ZWNnla9-^iR?9nu_PcS#!j@HRTx}leYN2(W$qfpPh7UDLQBpU9rgzA>p$gwbj zCj%jR6`YA^y8GZ{9R!)CJLpsZnuu$dBf!$VqwO9@nBQ&3IFWTaTv(x&q= zMG%t`>iFy}_(;?W@m19oV6o2G7F1qh=w*u880pWEGVAK#T-sa#niC9y5hda1Xku3H zQtk{Y=7@(UF)%RjVvG8)PU&TEkm>}^fD?lA+c37* z@!B#?i9}RFMpr)d2j2<30In8f7GQ~*f%`sgkTV$4a;~l1XzAK4>|uLVxaAO2W`r1Q zC0yp7ggWjE!tFeXs--P$RggZqG3;iXU%)q--7K|1{wFZLT=kvY2 zdM@;%;C=A9ZTa6gbM5$d=h9s`&hWAAB)>xb<4DDld{BRPZrz2u$Q*tQC_9Jm&W|UN z#wxq=-8py{x^wRUkzb+wFGVWPlskNPj@*TJ7@p(b!MX5C{-g`Phs-ekPE%MHIygte#a+0m0N)#CkQVY>PWb2W zT*%`k;qu)+p$jJtXKw!I@LbBncnIUW^Dr*N@_*!4z>ddlVdA^?cl*08oa_!P8WrC{ z7d(T9Fupri=tACQ7XB5M|9k=dZ9moex^Q(t1)Tmknt#CqmhhzyGR?i$Qu`~VQwZ1^B*D$^YT@GikZ<-8sPFJm866O+kbClA8ZB1Ym@$&L_!} z!#}woU8yP#vluU6Q7{%+`L_*~sP{<(>{71Y&i?F=G{?I_+TUI+snQABl3n=@mgcG$ Qe&sHObmvPQd?Eh-0>L{r+l{J#(J( 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
  • Ed5q~7~z&PuV;_L$E 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 a3EGlf`3{!msucdgyA;x$FLm(6`2P>DC|bDy literal 0 HcmV?d00001 diff --git a/test_truerng.c b/test_truerng.c new file mode 100644 index 0000000..a64abe2 --- /dev/null +++ b/test_truerng.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include "include/otp.h" + +int main(int argc, char* argv[]) { + (void)argc; (void)argv; // Suppress unused parameter warnings + + hardware_rng_device_t device; + snprintf(device.port_path, sizeof(device.port_path), "/dev/ttyUSB0"); + device.device_type = TRUERNG_ORIGINAL; + snprintf(device.friendly_name, sizeof(device.friendly_name), "TrueRNG"); + device.is_working = 1; + + printf("Debug: Device type set to: %d (TRUERNG_ORIGINAL should be %d)\n", device.device_type, TRUERNG_ORIGINAL); + printf("Debug: Comparison result: device.device_type == SWIFTRNG is %s\n", + (device.device_type == SWIFTRNG) ? "TRUE" : "FALSE"); + + // Test with small buffer (1KB) and short timeout + const size_t test_bytes = 1024; + unsigned char* test_buffer = malloc(test_bytes); + if (!test_buffer) { + printf("ERROR: Cannot allocate test buffer\n"); + return 1; + } + + size_t collected = 0; + time_t start_time = time(NULL); + + printf("Testing TrueRNG device at %s...\n", device.port_path); + + // Test device connectivity with timeout + int result = collect_truerng_entropy_from_device(&device, test_buffer, test_bytes, &collected, 1); + + time_t end_time = time(NULL); + double test_duration = difftime(end_time, start_time); + + if (result == 0 && collected > 0) { + double speed_kbps = (collected / 1024.0) / (test_duration > 0 ? test_duration : 1.0); + printf("SUCCESS: Collected %zu bytes in %.2f seconds (%.2f KB/s)\n", collected, test_duration, speed_kbps); + + // Show first few bytes as hex + printf("First 16 bytes: "); + for (int i = 0; i < 16 && i < (int)collected; i++) { + printf("%02x ", test_buffer[i]); + } + printf("\n"); + } else { + printf("FAILED: Error code %d, collected %zu bytes in %.2f seconds\n", result, collected, test_duration); + } + + free(test_buffer); + return result; +} \ No newline at end of file