Files
lib-privatebin/README.md

3.7 KiB

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

Entwicklung & Build

Voraussetzungen

  • CMake 3.10+
  • C++17-fähiger Compiler (MSVC 2022 bzw. GCC/Clang)
  • Git
  • vcpkg (wird bei Makefile-Nutzung automatisch gebootstrapped)

Abhängigkeiten

  • cryptopp (Crypto++)
  • nlohmann-json
  • Windows: WinHTTP (SDK)
  • Linux: libcurl (wird automatisch über vcpkg genutzt)

Schnellstart mit Makefile (Windows & Linux)

  1. Abhängigkeiten installieren, konfigurieren und bauen:
make
  1. Beispiel bauen und ausführen:
make example

Das Makefile erledigt:

  • vcpkg klonen & bootstrappen
  • Pakete aus vcpkg.json installieren
  • CMake mit vcpkg-Toolchain konfigurieren
  • Bibliothek und Beispiel bauen

Manuell mit CMake

# vcpkg klonen & bootstrappen
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'"

# Konfigurieren
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="$HOME/vcpkg/scripts/buildsystems/vcpkg.cmake"

# Bauen
cmake --build build --config Release

# Beispiel
cmake -S example -B example/build -DCMAKE_BUILD_TYPE=Release
cmake --build example/build --config Release

Usage

API Functions

// 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

#include "privatebinapi.h"
#include <iostream>

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.