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

Uploaded CPython 3.7+Windows x86-64

keeper_pam_webrtc_rs-1.6.2-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.2-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.2-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.2-cp37-abi3-macosx_11_0_arm64.whl (15.1 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

keeper_pam_webrtc_rs-1.6.2-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.2.tar.gz.

File metadata

  • Download URL: keeper_pam_webrtc_rs-1.6.2.tar.gz
  • Upload date:
  • Size: 637.9 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.2.tar.gz
Algorithm Hash digest
SHA256 88ed7fdd667c6c1f1bc2eb66b92edd32b7e963b6b956a1982a87de3eaa39340d
MD5 b3aa1a0ab42efb7775516a3faf4bc782
BLAKE2b-256 ac3d1e7a76654b5edb40ea3683acf3a112ce1529a7e17e98492b3bef733e735a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.2-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6ff6ca83381d1e37e01a99d901ddc658498be9e66c808b66cbbe5db9a6f2c6b5
MD5 0955e8591d73bda4b239b7e512226cc3
BLAKE2b-256 bc955021f9d96614e82171f0de11a4fbbceaabc0048531657271ee08e721a97f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.2-cp37-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6a3735b2f007bd9efead6b445734e22d0b1c08cdb45e5b7bd54ba7c67e4faf8d
MD5 c6f7c1a073dce0717ebab676f006b87f
BLAKE2b-256 83c7d0b8bb2b65c7de1450928e8c89461d309e383bf238587e3a67284a9a4c3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.2-cp37-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bb69562182c63e7d82e772b6fa07c1d0dafe91852a7ee9bfe633c0d3bac94165
MD5 adbcecbf28f32d0ff8001305adbccf52
BLAKE2b-256 7306f0ed84795fb82f47f21996d23f30c1fa8f22c27ae97fdf6d898dc78a6978

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.2-cp37-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 23da2ed79193e06828726ce85f159dad7a89b94c13d7eb48ecb4e66ce7b44a46
MD5 f9027a3987ff124aad57585963f00cf4
BLAKE2b-256 b15fb3648527a3e0cb5e6a8b67dea1801feb9dadd39b0dc59042652010a9b765

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.2-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bade991bf147f5a020704fa69e8fcd9dba339ef6c1c8394dcfad24a62b31d97e
MD5 7c4ee047411e8d02bcc1d86534aa9c79
BLAKE2b-256 f98fabe26df630bd53b65a871303f33dfbebc5422cb737d095b0d83b52d356ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.2-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a2033340fe4ac12a3c4acc619a0eb42b6cb8c9a464a6c8a11ea28cc6c0bab775
MD5 a7241854f43826dd53c43db70bfef5b3
BLAKE2b-256 8a976de2a4440c8b865dba8823cd7a40f0c43f47c5c94b0a54eef04519d83e78

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