webRTC - правильно использовать SIP и искать библиотеку Python

Я пытаюсь завершить рукопожатие, используя DTLS и SIP. Этот веб-сайт [0] сообщает мне, что мне нужно отправить ответ SIP на входящий запрос, который содержит мой файл SDP и отпечатки пальцев, использованные для завершения рукопожатия DTLS. Я использую модель клиента <-> на данный момент. Клиент запрашивает вызов, и у меня уже есть пакеты RTP, но мне нужно отправить их обратно клиенту, когда соединение установлено. У меня возникли трудности с установлением связи.

Для справки о рукопожатии DTLS у меня есть скриншот пакетов, которые я имею в виду, которые я нашел, используя wireshark во время вызова браузера-браузера с использованием библиотеки webRTC. https://imgur.com/a/00bi7

Где я могу найти хорошую библиотеку Python, которая используется для этих целей?

1 ) Setup the DTLS handshake and encrypt my RTP packets to SRTP?

[0] https://tools.ietf.org/html/rfc5763

1 ответ

Для фактического шифрования / дешифрования SRTP вы можете использовать pylibsrtp:

https://pypi.python.org/pypi/pylibsrtp

Рукопожатие DTLS (которое генерирует главный ключ SRTP) сложнее, но вскоре pyOpenSSL должен иметь необходимые привязки для включения расширения SRTP:

https://github.com/pyca/pyopenssl/pull/734

Как только это станет доступно, вы сможете извлечь генерирующий ключевой материал как:

SRTP_KEY_LEN = 16
SRTP_SALT_LEN = 14

def get_srtp_key_salt(src, idx):
    key_start = idx * SRTP_KEY_LEN
    salt_start = 2 * SRTP_KEY_LEN + idx * SRTP_SALT_LEN
    return (
        src[key_start:key_start + SRTP_KEY_LEN] +
        src[salt_start:salt_start + SRTP_SALT_LEN]
    )

material = connection.export_keying_material(
    b'EXTRACTOR-dtls_srtp',
    2 * (SRTP_KEY_LEN + SRTP_SALT_LEN))

if is_server:
    srtp_tx_key = get_srtp_key_salt(material, 1)
    srtp_rx_key = get_srtp_key_salt(material, 0)
else:
    srtp_tx_key = get_srtp_key_salt(material, 0)
    srtp_rx_key = get_srtp_key_salt(material, 1)
Другие вопросы по тегам