# PrivateBin API C++ DLL A cross-platform C++ library for interacting with PrivateBin servers. ## Overview This library provides a simple C++ interface for interacting with PrivateBin services. PrivateBin is a minimalist, open-source online pastebin where the server has zero knowledge of stored data. All data is encrypted and decrypted in the browser using 256-bit AES encryption. ## Features - Create new pastes with optional expiration, formatting, and security settings - Retrieve existing pastes by ID - Delete pastes using the deletion token - Cross-platform compatibility (Windows and Linux) - Support for PrivateBin API versions 1.3 and later ## Development & Build ### Prerequisites - CMake 3.10+ - C++17-fähiger Compiler (MSVC 2022 bzw. GCC/Clang) - Git - vcpkg (wird bei Makefile-Nutzung automatisch gebootstrapped) ### Dependencies - cryptopp (Crypto++) - nlohmann-json - Windows: WinHTTP (SDK) - Linux: libcurl (used automatically via vcpkg) ### Quick start with Makefile (Windows & Linux) 1) Install dependencies, configure, and build: ``` make ``` 2) Beispiel bauen und ausführen: ``` make example ``` The Makefile does: - clone and bootstrap vcpkg - install packages from `vcpkg.json` - configure CMake with the vcpkg toolchain - build the library and the example ### Manual with CMake ``` # clone and bootstrap vcpkg git clone https://github.com/microsoft/vcpkg.git "$HOME/vcpkg" "$HOME/vcpkg/bootstrap-vcpkg.sh" # Linux/macOS # Windows (PowerShell): # powershell -NoProfile -ExecutionPolicy Bypass -Command "& '$env:USERPROFILE\vcpkg\bootstrap-vcpkg.bat'" # Configure cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="$HOME/vcpkg/scripts/buildsystems/vcpkg.cmake" # Build cmake --build build --config Release # Example cmake -S example -B example/build -DCMAKE_BUILD_TYPE=Release cmake --build example/build --config Release ``` ## Usage ### API Functions ```cpp // Create a new paste int create_paste(const char* server_url, const char* content, const char* password, const char* expiration, const char* format, int burn_after_reading, int open_discussion, char** paste_url, char** delete_token); // Retrieve a paste int get_paste(const char* server_url, const char* paste_id, const char* key, char** content); // Delete a paste int delete_paste(const char* server_url, const char* paste_id, const char* delete_token); // Free memory allocated by the API functions void free_string(char* str); ``` ### Example ```cpp #include "privatebinapi.h" #include int main() { char* paste_url = nullptr; char* delete_token = nullptr; int result = create_paste( "https://privatebin.net", "Hello, PrivateBin!", nullptr, // No password "1hour", // Expire in 1 hour "plaintext", // Plain text format 0, // Don't burn after reading 0, // No discussion &paste_url, &delete_token ); if (result == 0) { std::cout << "Paste created: " << paste_url << std::endl; std::cout << "Delete token: " << delete_token << std::endl; // Free allocated memory free_string(paste_url); free_string(delete_token); } else { std::cout << "Failed to create paste: " << result << std::endl; } return 0; } ``` ## Error Codes - 0: Success - 1: Network error - 2: Encryption/decryption error - 3: Invalid input - 4: Server error - 5: JSON parsing error ## License This project is licensed under the MIT License - see the LICENSE file for details.