diff --git a/.gitignore b/.gitignore index 5575209..e6cb23b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ otp pads/ +files/ Gemini.md TropicOfCancer-HenryMiller.txt +.gitea_token # Auto-generated files (none currently) diff --git a/build.sh b/build.sh index 9a0feeb..ff5863f 100755 --- a/build.sh +++ b/build.sh @@ -150,38 +150,153 @@ update_source_version() { fi } -# Build functions -build_project() { - print_status "Cleaning previous build..." - make clean - increment_version - print_status "Building OTP project..." - make +# Cross-platform build functions +check_cross_compiler() { + if ! command -v aarch64-linux-gnu-gcc > /dev/null 2>&1; then + print_error "ARM64/AArch64 cross-compiler not found!" + print_error "Install with: sudo apt install gcc-aarch64-linux-gnu" + print_error "Or on other distros: gcc-cross-aarch64" + return 1 + fi + return 0 +} + +upload_release_asset() { + local api_url="$1" + local token="$2" + local version="$3" + local filename="$4" + + if [ ! -f "$filename" ]; then + print_warning "Binary $filename not found, skipping upload" + return 1 + fi + + print_status "Uploading $filename to release..." + + # Get release ID first + local release_id=$(curl -s -H "Authorization: token $token" \ + "$api_url/releases/tags/$version" | \ + grep -o '"id":[0-9]*' | head -n1 | cut -d: -f2) + + if [ -z "$release_id" ]; then + print_error "Could not get release ID for $version" + return 1 + fi + + # Upload the asset + curl -X POST "$api_url/releases/$release_id/assets" \ + -H "Authorization: token $token" \ + -H "Content-Type: application/octet-stream" \ + -T "$filename" \ + --data-binary "@$filename" \ + -G -d "name=$filename" + if [ $? -eq 0 ]; then - print_success "Build completed successfully" + print_success "Uploaded $filename successfully" else - print_error "Build failed" + print_warning "Failed to upload $filename" return 1 fi } -build_static() { +create_gitea_release() { + local version="$1" + + # Read token from ~/.gitea_token + if [ ! -f "$HOME/.gitea_token" ]; then + print_error "No ~/.gitea_token found. Cannot create release." + print_error "Create ~/.gitea_token with your Gitea access token" + return 1 + fi + + local token=$(cat "$HOME/.gitea_token" | tr -d '\n\r') + local api_url="https://git.laantungir.net:222/api/v1/repos/laantungir/otp" + + print_status "Creating Gitea release for $version..." + + # Create release + local response=$(curl -s -X POST "$api_url/releases" \ + -H "Authorization: token $token" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\": \"$version\", \"name\": \"$version\", \"body\": \"Automated release for $version\"}") + + if echo "$response" | grep -q '"id"'; then + print_success "Created release $version" + + # Upload binaries + upload_release_asset "$api_url" "$token" "$version" "otp-x86_64" + upload_release_asset "$api_url" "$token" "$version" "otp-arm64" + else + print_warning "Release may already exist or creation failed" + print_status "Response: $response" + + # Try to upload to existing release anyway + upload_release_asset "$api_url" "$token" "$version" "otp-x86_64" + upload_release_asset "$api_url" "$token" "$version" "otp-arm64" + fi +} + +build_project() { print_status "Cleaning previous build..." make clean increment_version - print_status "Building OTP project with static linking..." - make static - if [ $? -eq 0 ]; then - print_success "Static build completed successfully" + + # Check for cross-compiler + if ! check_cross_compiler; then + print_warning "ARM64/AArch64 cross-compiler not available, building x86_64 only" + + # Build x86_64 only + print_status "Building OTP project for x86_64..." + CC=gcc make + if [ $? -eq 0 ]; then + mv otp otp-x86_64 + print_success "x86_64 build completed successfully" + else + print_error "x86_64 build failed" + return 1 + fi else - print_error "Static build failed" - return 1 + # Build both architectures + print_status "Building OTP project for x86_64..." + CC=gcc make clean + CC=gcc make + if [ $? -eq 0 ]; then + mv otp otp-x86_64 + print_success "x86_64 build completed successfully" + else + print_error "x86_64 build failed" + return 1 + fi + + print_status "Building OTP project for ARM64/AArch64..." + CC=aarch64-linux-gnu-gcc make clean + CC=aarch64-linux-gnu-gcc make + if [ $? -eq 0 ]; then + mv otp otp-arm64 + print_success "ARM64/AArch64 build completed successfully" + else + print_error "ARM64/AArch64 build failed" + return 1 + fi fi + + # Create Gitea release with binaries + if [ -f "$HOME/.gitea_token" ]; then + create_gitea_release "$NEW_VERSION" + else + print_warning "No ~/.gitea_token found. Skipping release creation." + print_warning "Create ~/.gitea_token with your Gitea access token to enable releases." + fi + + print_success "Build completed successfully" } clean_project() { print_status "Cleaning build artifacts..." make clean + # Remove cross-compiled binaries + rm -f otp-x86_64 otp-arm64 print_success "Clean completed" } @@ -212,9 +327,6 @@ case "${1:-build}" in build) build_project ;; - static) - build_static - ;; clean) clean_project ;; @@ -226,22 +338,29 @@ case "${1:-build}" in ;; *) echo "OTP Cipher Build Script" - echo "Usage: $0 [-m \"commit message\"] {build|static|clean|install|uninstall}" + echo "Usage: $0 [-m \"commit message\"] {build|clean|install|uninstall}" echo "" echo "Options:" echo " -m, --message \"text\" - Specify commit message (skips interactive prompt)" echo "" echo "Commands:" - echo " build - Build project with automatic version increment (default)" - echo " static - Build with static linking and version increment" - echo " clean - Clean build artifacts" + echo " build - Cross-compile for x86_64 and ARM64/AArch64 with automatic version increment (default)" + echo " clean - Clean build artifacts and cross-compiled binaries" echo " install - Install to system (requires build first)" echo " uninstall - Remove from system" echo "" + echo "Build Output:" + echo " otp-x86_64 - Native x86_64 binary" + echo " otp-arm64 - ARM64/AArch64 binary for Raspberry Pi (if cross-compiler available)" + echo "" + echo "Gitea Integration:" + echo " - Automatically creates releases with binaries if ~/.gitea_token exists" + echo " - Requires: ARM64 cross-compiler (gcc-aarch64-linux-gnu)" + echo "" echo "Examples:" echo " $0" echo " $0 -m \"Fixed checksum parsing bug\"" - echo " $0 --message \"Added new feature\" static" + echo " $0 --message \"Added new feature\" build" exit 1 ;; esac diff --git a/otp.c b/otp.c index 3a2929d..0ee7ab0 100644 --- a/otp.c +++ b/otp.c @@ -330,7 +330,7 @@ int interactive_mode(void) { void show_main_menu(void) { - printf("\n=========================== Main Menu - OTP v0.2.111 ===========================\n\n"); + printf("\n=========================== Main Menu - OTP v0.3.1 ===========================\n\n"); printf(" \033[4mT\033[0mext encrypt\n"); //TEXT ENCRYPT printf(" \033[4mF\033[0mile encrypt\n"); //FILE ENCRYPT @@ -2848,7 +2848,7 @@ int generate_ascii_armor(const char* chksum, uint64_t offset, const unsigned cha strcpy(*ascii_output, "-----BEGIN OTP MESSAGE-----\n"); char temp_line[256]; - snprintf(temp_line, sizeof(temp_line), "Version: v0.2.111\n"); + snprintf(temp_line, sizeof(temp_line), "Version: v0.3.1\n"); strcat(*ascii_output, temp_line); snprintf(temp_line, sizeof(temp_line), "Pad-ChkSum: %s\n", chksum); @@ -4394,7 +4394,7 @@ int handle_add_entropy_to_pad(const char* pad_chksum) { } void print_usage(const char* program_name) { - printf("OTP Cipher - One Time Pad Implementation v0.2.111\n"); + printf("OTP Cipher - One Time Pad Implementation v0.3.1\n"); printf("Built for testing entropy system\n"); printf("Usage:\n"); printf(" %s - Interactive mode\n", program_name);