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

Uploaded CPython 3.7+Windows x86-64

keeper_pam_webrtc_rs-1.6.0-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.0-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.0-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.0-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.0-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.0.tar.gz.

File metadata

  • Download URL: keeper_pam_webrtc_rs-1.6.0.tar.gz
  • Upload date:
  • Size: 637.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.6.0.tar.gz
Algorithm Hash digest
SHA256 e29ec22ab40b54508d2d70b203396077b0454227614e6073b2e2f7cdd5537fa6
MD5 b7d9d164382ea9637629650c71da6487
BLAKE2b-256 d21efe46980e88243cbf3b52e9acc9c2e664a485b2d618736488dd85c9824dda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6f821e224d98727794c51114e69a9fd0dc377ac9b2a9678c7124c6e9e9f098f9
MD5 5b955a2b01a5213b378e45bd3228dd7f
BLAKE2b-256 c23d4c9ee240661e43202c5738d39eb3a3d6ce38770368bcd00da5b606804683

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.0-cp37-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c4c500e7b30a8d581b2bf5791f154ff772c640686b1285efed8790e4590d14f5
MD5 ecd0f9d7725503e8cd7b5cc963e5d6c1
BLAKE2b-256 66197e1784787b256025dc62b3be604cc7591b1f4fc57330df65e7bc47f4c0c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.0-cp37-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b60916da31c2016bc2e17c11c9e9afc81b8187ca7f2ed015e8c74f4377089e44
MD5 c6ec4ef4cb1629c296ea82caf8b6aa89
BLAKE2b-256 11a9aac4a8e08c0a6f502488225e366043aeb128e24ddc5a3030571cb36f20ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.0-cp37-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cb25611ff5ba6ccec245a1ee47d15fb6fd007c90547090cf1d45892eeec9a6e1
MD5 6b79c8171ff7c088c5949484fa3ebca8
BLAKE2b-256 febf60c7e7cc39651b097933fe014abade192b9123ac506718da4decf365da35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c00a2246013906e58a0581a95ab4190d6b55b0c51127ec49a071588393d067ae
MD5 200cadf5885e40474912040ca352dc46
BLAKE2b-256 488efbcea53f96fb5dc09c16373b80e93dde807a32a534bc679fec00c2995e58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for keeper_pam_webrtc_rs-1.6.0-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 54d2bca29ba686fe8554862ca13bf3586cbc89da2e0a16b5f8fe16d32b8c7055
MD5 8874ce833db56ddf6845b1295ae7dffe
BLAKE2b-256 64e603c8716360277b2fecbb65fa97ac464538b7d0afcf1e863e6fcf8ef10e19

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