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.2.5.tar.gz (420.4 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.2.5-cp37-abi3-win_amd64.whl (7.4 MB view details)

Uploaded CPython 3.7+Windows x86-64

keeper_pam_webrtc_rs-1.2.5-cp37-abi3-musllinux_1_2_x86_64.whl (7.3 MB view details)

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

keeper_pam_webrtc_rs-1.2.5-cp37-abi3-manylinux_2_28_x86_64.whl (8.3 MB view details)

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

keeper_pam_webrtc_rs-1.2.5-cp37-abi3-manylinux_2_28_aarch64.whl (8.3 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.28+ ARM64

keeper_pam_webrtc_rs-1.2.5-cp37-abi3-macosx_11_0_arm64.whl (7.5 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

keeper_pam_webrtc_rs-1.2.5-cp37-abi3-macosx_10_12_x86_64.whl (7.8 MB view details)

Uploaded CPython 3.7+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: keeper_pam_webrtc_rs-1.2.5.tar.gz
  • Upload date:
  • Size: 420.4 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.2.5.tar.gz
Algorithm Hash digest
SHA256 6e07dd2982aedaca5df67bfe33e14b51435cb92dcd139c2cc47663c822c9f342
MD5 cc213fc30e553bd4d7a88186532f054c
BLAKE2b-256 415489e01bb5e5235c091a39b84f16f690bf2a9a01c9e8616b35a1ae98f5b682

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.2.5-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 165ef088a91132b0095adfdc7c66cc860088f121db409096a61737f7322306ef
MD5 72f3968c3f240c53b0f6a04fd9c1a9f3
BLAKE2b-256 e8e1130eff5ac68dc385f85297dbab124b4aed558688ba38799391dc02ccee50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.2.5-cp37-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9a93198ffd7e917c69c4b037d3f3fa930fdb4318ececefb818f93e085062c71a
MD5 ffb667ad7b5a4d8bb20d9a70947f4482
BLAKE2b-256 48eb712a4c70df207076a2a250233c06efe9336326016f07d7959b9113907cf3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.2.5-cp37-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 08ba70d29e18633888874156ce125bc96b9387f0efb18b5820715df1577b76ca
MD5 0b5d068f91745b40b3d1648050a92872
BLAKE2b-256 6e09361833ff2dff7931b4996ccd89f586e6ab631dcba9e9480720d6f5f79299

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.2.5-cp37-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e11838623812d0c89fb339a1a826ff3b33d21bdf63e6c885651b5f2e5b4734e6
MD5 f76b00a63f9c840f1cf742bc064fafb4
BLAKE2b-256 9c01104a1ae75d774a5a2b267492fd0659ffbc5f8842929bfeae36368ee627c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.2.5-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f5b50609da277b9e7047351075b4e27276115023466af0c35e8b3f40177a2434
MD5 385c4ad01232efecddb5da0d96b85331
BLAKE2b-256 3fe7dce1d4a61b8c96720a09fdf62a3a4df883ea6281bd15cc7791c255e4f477

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.2.5-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8a5cb41a0a7c7bed8fdd75079e591b466aa0ae82b2acfdaa4aa7681a99b27f94
MD5 f820ef63428431342b4dbf9b7dd44c88
BLAKE2b-256 2e4086e20335fee11a7c9573a35d7419084bc5cce368e6c18b5ac57f9a0de8f8

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