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

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.6.1.tar.gz (637.8 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.6.1-cp37-abi3-win_amd64.whl (16.2 MB view details)

Uploaded CPython 3.7+Windows x86-64

keeper_pam_webrtc_rs-1.6.1-cp37-abi3-musllinux_1_2_x86_64.whl (16.4 MB view details)

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

keeper_pam_webrtc_rs-1.6.1-cp37-abi3-manylinux_2_28_x86_64.whl (18.8 MB view details)

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

keeper_pam_webrtc_rs-1.6.1-cp37-abi3-manylinux_2_28_aarch64.whl (18.0 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.28+ ARM64

keeper_pam_webrtc_rs-1.6.1-cp37-abi3-macosx_11_0_arm64.whl (15.0 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

keeper_pam_webrtc_rs-1.6.1-cp37-abi3-macosx_10_12_x86_64.whl (15.8 MB view details)

Uploaded CPython 3.7+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: keeper_pam_webrtc_rs-1.6.1.tar.gz
  • Upload date:
  • Size: 637.8 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.6.1.tar.gz
Algorithm Hash digest
SHA256 ffcda923d3ecd7f9133b3957ca2407bf9e848c801bc75b4565ec5e762baa5d4a
MD5 c5843ae725adcc1c980685abb6ff32f1
BLAKE2b-256 68d2a0ddd9f70aeb1c3529359f9715a53aa40445d18f4aec73dd0f78753adfd2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 21d8977decdb17d860dc5e52b101845ddc1bdb64d4404221b5846e112d68acaf
MD5 03fb63070863e4057fa13541cd74b874
BLAKE2b-256 fb99ccdc1c1a5532dcc7bcf4ee352423f39f4a91a63c2ff7971e9fe788797fad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.1-cp37-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1f7eec5a7199f03a5f95c166baac824885dec7033348f8411736150b12e80358
MD5 05c4329f08a1cefc263afd54956ac779
BLAKE2b-256 8d008698d77fb2d9a1940d3bdab0071d50663dcedc147eb3c5019bf85faf25dd

See more details on using hashes here.

File details

Details for the file keeper_pam_webrtc_rs-1.6.1-cp37-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.1-cp37-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 61985a1b01bd74c16b025e994759798ff665fcaaf94535ed1213dcd32d542060
MD5 2b16e94302c101328bfb6793083f7952
BLAKE2b-256 9504b69ec5a10c409e94c9a114473de28c5f0daa4161b024a0d834f8474ee9cc

See more details on using hashes here.

File details

Details for the file keeper_pam_webrtc_rs-1.6.1-cp37-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.1-cp37-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d2f753863134c58b41b188701b3bc8a0bcb21c1672d09162cbcc9bc82c59f8ca
MD5 bd6a7aa41895a39a05cc7cb5e042bee3
BLAKE2b-256 d69bd7068d4096966b57378e28295efc07ed34eda738f141635d7456cefdb662

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.1-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e48ba382b30c8be9908e264b4fa2abd58008397beaa2bba8e096607718e3c7f5
MD5 c37b3ade56f06ffb456b3658e2a023a5
BLAKE2b-256 b6fc9988b24dc91e31e5e60b2bc7a4f491c5f0964595c217b6117c5ef115e1fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.1-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 abb56257727e256702a6d784eea611a68c4829a8d1d62521db16c1f0b93dbe46
MD5 551cb703a3c7012c50fb279f14bda69a
BLAKE2b-256 f800f3723a59f5511ea966007d6e6d816f6aaf9e011d2048761e1796d63ada20

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