Skip to content

SRTP encoder and decoder #317

@gavv

Description

@gavv

Last revised: Oct 2023

Create SRTP encoder and decoder using libSRTP. See #229 for background.

Steps:

  • Add libSRTP dependency to SConstruct and build-3rdparty.py. Add target_libsrtp to SConstruct and enable it when libSRTP is enabled. It should be enabled by default and disabled by --disable-libsrtp scons option. An example of adding a new dependency can be found in libsndfile source and sink #246 and Implement backtrace printing for non-glibc targets #265.

  • Add rtp::SrtpWriter (for sender), implementing packet::IWriter, and rtp::SrtpReader (for receiver), implementing packet::IReader. The idea is that we write unprotected packets to the writer and it protects them and in turn writes to the next writer. The opposite for the reader. Place them to roc_rtp/target_libsrtp.

  • Add unit tests for SrtpWriter and SrtpReader to roc_rtp.

  • Integrate SrtpReader and SrtpReader into roc_pipeline. They should be enabled conditionally. An example of conditionally enabled pipeline element is packet::Interleaver. We should also add necessary configuration to roc_pipeline/config.h.

  • Add command-line options to enable SRTP in roc-recv and roc-send and configure it. We can start with a pre-shared key specified via command-line.

  • It would be also desirable to add integration tests for SRTP to roc_pipeline and public_api. See src/tests/roc_pipeline and src/tests/public_api.

Notes:

  • SrtpWriter will need to obtain the byte representation of packet::Packet. We'll have to use packet::IComposer for that. An example can be found in fec::Writer. It uses IComposer for the same reason.

  • SRTP sender and receiver need some way to exchange the key material. Several key management schemes and protocols exist that can be used for that. I didn't read the corresponding RFCs yet and for know can't say which of them we want to implement. In this task, we should start with some simple form of pre-shared keys or certificates provided via command-line.

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-codecscategory: Audio and FEC codecsC-networkingcategory: Network and streamingC-securitycategory: Security or encryptionhelp wantedLooking for contributorsmost wantedNeeded most among other help-wanted issues

    Projects

    Status

    Help wanted

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions