Skip to main content

Keeper PAM WebRTC for Python - A secure, stable, and high-performance Tube API for Python, providing WebRTC-based secure tunneling with enterprise-grade security and reliability optimizations.

Project description

Keeper PAM WebRTC for Python

A secure, stable, and high-performance Tube API for Python, providing WebRTC-based secure tunneling with enterprise-grade security and reliability optimizations.

Core Values

Security • Stability • Performance - Built for Keeper Security's mission-critical applications:

  • 🔒 Security First: Memory-safe Rust implementation with comprehensive bounds checking
  • 🛡️ Enterprise Stability: Lock-free architecture eliminates race conditions and deadlocks
  • ⚡ Optimized Performance: Advanced optimizations deliver exceptional speed when you need it
  • 🔧 Production Ready: Zero-configuration reliability for demanding security applications

Description

keeper-pam-webrtc-rs provides Python bindings to a Rust-based Tube API for secure communication, designed for:

  • Secure tunneling via WebRTC data channels with memory-safe operations
  • Multi-connection management through tube abstractions
  • Reliable peer connection handling with comprehensive error handling
  • Efficient channel management for different communication patterns
  • Cross-platform compatibility (Linux, macOS, Windows, Alpine)
  • Mission-critical reliability for security-focused applications

This package is designed to be used with Keeper Gateway and Keeper Commander. It provides a secure, reliable tube-based communication system built on WebRTC, specifically tailored for Keeper Security's internal products and security-critical tunneling use cases.

Note: This package is intended for internal Keeper Security products and is not being actively advertised for general use.

Installation

pip install keeper-pam-webrtc-rs

Usage

import keeper_pam_webrtc_rs

# Create a tube registry
registry = keeper_pam_webrtc_rs.PyTubeRegistry()

# Define a signal callback for WebRTC events
def on_signal(signal_dict):
    print(f"Received signal: {signal_dict}")
    # Handle ICE candidates, connection state changes, etc.

# Create a server-side tube for tunneling
server_result = registry.create_tube(
    conversation_id="tunnel-session-123",
    settings={
        "conversationType": "tunnel",
        "target_host": "127.0.0.1", 
        "target_port": "22"  # SSH tunnel example
    },
    trickle_ice=True,
    callback_token="server-token",
    ksm_config="server-config",
    signal_callback=on_signal
)

# Get the offer SDP to send to the client
# NOTE: All SDP (offers, answers) are base64-encoded - use them directly, don't decode!
server_offer = server_result['offer']  # Base64-encoded WebRTC offer
server_tube_id = server_result['tube_id']

# Create a client-side tube with the offer
client_result = registry.create_tube(
    conversation_id="tunnel-client-123",
    settings={
        "conversationType": "tunnel",
        "target_host": "192.168.1.100",
        "target_port": "22"
    },
    trickle_ice=True,
    callback_token="client-token",
    ksm_config="client-config",
    offer=server_offer,  # Pass base64-encoded offer directly (don't decode!)
    signal_callback=on_signal
)

# Get the answer SDP to send back to server
client_answer = client_result['answer']  # Base64-encoded WebRTC answer
client_tube_id = client_result['tube_id']

# Set the remote description on the server
# NOTE: Pass base64-encoded answer directly
registry.set_remote_description(server_tube_id, client_answer, is_answer=True)

# Check connection state
state = registry.get_connection_state(server_tube_id)
print(f"Connection state: {state}")

# Close when done
registry.close_tube(server_tube_id)
registry.close_tube(client_tube_id)

Server Mode with TCP Listener

For server tubes that listen for external TCP connections:

# Create server tube with TCP listener (dynamic port)
server_result = registry.create_tube(
    conversation_id="tcp-tunnel",
    settings={
        "conversationType": "tunnel",
        "local_listen_addr": "127.0.0.1:0"  # 0 = dynamic port assignment
    },
    trickle_ice=True,
    callback_token="token",
    ksm_config="config",
    signal_callback=on_signal
)

# Get actual listening address (port assigned by OS)
listen_addr = server_result['actual_local_listen_addr']  # "127.0.0.1:59194"
host, port = listen_addr.split(':')

# External clients can now connect to this address
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, int(port)))
# Data flows: TCP → WebRTC → Remote tube → Remote target

API Documentation: See docs/PYTHON_API_CONTRACT.md for complete API reference including:

  • Base64 SDP encoding requirements
  • Return value specifications
  • Migration guides and common pitfalls

Features

  • 🔒 Memory Safety: Rust-powered implementation prevents buffer overflows and memory corruption
  • 🛡️ Reliable Architecture: Lock-free design eliminates race conditions and ensures stability
  • ⚡ Efficient Performance: Optimized for speed without compromising security or stability
  • 🌊 Tube Abstraction: High-level API for managing WebRTC-based secure tunnels
  • 🌍 Cross-Platform: Secure, consistent behavior across Linux, macOS, Windows, Alpine
  • 🐍 Python Integration: Built with abi3 for maximum compatibility (Python 3.7+)
  • 🔧 Production Hardened: Comprehensive error handling and graceful degradation

Tube API Architecture

This implementation provides a Tube-based abstraction over WebRTC:

Security Features

  • Memory-Safe Operations: Rust's ownership system prevents common security vulnerabilities
  • Bounds Checking: Comprehensive validation prevents buffer overflows and data corruption
  • Zero Unsafe Code: Hot paths use only verified, safe Rust code (except vetted SIMD intrinsics)
  • Graceful Error Handling: Robust error recovery prevents crashes and data leaks

Tube Management

  • Multi-Connection Support: Each tube can manage multiple WebRTC connections
  • Channel Abstraction: High-level channel management for different protocols
  • State Management: Comprehensive connection state tracking and reporting
  • Signal Handling: Event-driven architecture for ICE candidates and state changes

Performance Features

  • SIMD Optimization: Hardware-accelerated frame parsing with safe fallbacks
  • Zero-Copy Pipelines: Efficient data handling minimizes memory overhead
  • Event-Driven Design: Native WebRTC events provide responsive communication
  • Always Optimized: Maximum efficiency by default, no configuration required

Tube API Reference

Core Methods

  • create_tube(conversation_id, settings, ...) - Create a new secure tube or add conversation to existing tube
  • set_remote_description(tube_id, sdp, is_answer) - Set remote SDP description
  • add_ice_candidate(tube_id, candidate) - Add ICE candidate for connection
  • get_connection_state(tube_id) - Get current connection state
  • close_connection(connection_id) - Close specific connection
  • close_tube(tube_id) - Close entire tube

Conversation Types

The tube API supports different communication patterns:

  • tunnel - Secure TCP tunneling through WebRTC
  • guacd - Apache Guacamole protocol tunneling
  • socks5 - SOCKS5 proxy tunneling

Build & Verification

To build and verify the implementation:

# Standard build (all optimizations enabled)
cargo build --release

# Run comprehensive test suite
cargo test --release

# Optional: Enable debug logging for troubleshooting
cargo build --release --features production_debug

Why This Implementation?

Built specifically for Keeper Security's tunneling requirements:

  • Security-First Design: Memory safety and comprehensive validation prevent vulnerabilities
  • Mission-Critical Reliability: Lock-free architecture ensures stable operation under load
  • Optimized for Security Applications: Performance optimizations that don't compromise security
  • Tube Abstraction: High-level API designed specifically for secure tunneling use cases

The secure, stable, high-performance tube communication system for enterprise security applications.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

keeper_pam_webrtc_rs-1.0.4.tar.gz (355.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

keeper_pam_webrtc_rs-1.0.4-cp37-abi3-win_amd64.whl (7.1 MB view details)

Uploaded CPython 3.7+Windows x86-64

keeper_pam_webrtc_rs-1.0.4-cp37-abi3-musllinux_1_2_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.7+musllinux: musl 1.2+ x86-64

keeper_pam_webrtc_rs-1.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ x86-64

keeper_pam_webrtc_rs-1.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.0 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ ARM64

keeper_pam_webrtc_rs-1.0.4-cp37-abi3-macosx_11_0_arm64.whl (7.3 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

keeper_pam_webrtc_rs-1.0.4-cp37-abi3-macosx_10_12_x86_64.whl (7.6 MB view details)

Uploaded CPython 3.7+macOS 10.12+ x86-64

File details

Details for the file keeper_pam_webrtc_rs-1.0.4.tar.gz.

File metadata

  • Download URL: keeper_pam_webrtc_rs-1.0.4.tar.gz
  • Upload date:
  • Size: 355.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.3

File hashes

Hashes for keeper_pam_webrtc_rs-1.0.4.tar.gz
Algorithm Hash digest
SHA256 f91c18b7323e640ffc1e65948eba8be8a392f6d88247a1e1725bb9825cff7325
MD5 97070743a51c50b752c2d3c98fc0f66c
BLAKE2b-256 2af26f7568f5fdbe5c0c1ffd14a6ee47373c6f6377696061400ef23594904bd5

See more details on using hashes here.

File details

Details for the file keeper_pam_webrtc_rs-1.0.4-cp37-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.0.4-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 92ff77370a64cbca0451ce610968c1426d5c78c6b5c7799870508c6d29e879bd
MD5 9640f985bdbb96a6681b1eb9fd226862
BLAKE2b-256 722a213e05dc95b0f511f706611b4ef4a021fcd85fa47ab3f05f8bfdf4cbfb25

See more details on using hashes here.

File details

Details for the file keeper_pam_webrtc_rs-1.0.4-cp37-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.0.4-cp37-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6b192edbad904f0e3d680c3848f828adde591ff3a6a349475a1b046a1a59305a
MD5 a5cfedc019f70a5a4f4b1d91a048c9f6
BLAKE2b-256 b1afcc7aacb3bbd50f9a43e3aa78ea8a970827fbb632e626aa66af2aeab51f89

See more details on using hashes here.

File details

Details for the file keeper_pam_webrtc_rs-1.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e320c8826c577890e3b1818d25a0eaf8513d4a74a8345915872f4c71f4e90b72
MD5 a3abffc676be6ec19a8261ef25e43091
BLAKE2b-256 b24d72103e07cf225b3dcc12647b4edd560a7c667ef883987fcc4ce0ddc74950

See more details on using hashes here.

File details

Details for the file keeper_pam_webrtc_rs-1.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a33abfd4e7f812cf1c794845607eb31d3237b314849da66a544dd483cbb8464a
MD5 3c9f0eca37cae58ac749d683bd9d3c7d
BLAKE2b-256 5e0269fca345fe47f4723a53cf773035bb75e013d33185a0beff2848ae3e2108

See more details on using hashes here.

File details

Details for the file keeper_pam_webrtc_rs-1.0.4-cp37-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.0.4-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac6f4d9a642422597fa604b835639b36df60ce28759510f2b9a9f461aca7cf71
MD5 85da88d13f6011b044becfb1c3c82c9c
BLAKE2b-256 4218d29f2ba354a42578c988f726b9238c483f3c45c6c77c2febfb881aa115aa

See more details on using hashes here.

File details

Details for the file keeper_pam_webrtc_rs-1.0.4-cp37-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.0.4-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a7cd98a1c993656d930c82e958b11a085fa1adb06955de981f2f5453a49d2c41
MD5 2b845a5143126fb66fd663e40d8fc356
BLAKE2b-256 b602de43e38ed4c2920e696ca5f4ca8e653b76091d0914cd54a907cfb4c2afd7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page