SRTP encoder and decoder #317
Labels
codecs
Audio and FEC codecs
enhancement
help wanted
An important and awaited task but we have no human resources for it yet
much-needed
This issue is needed most among other help-wanted issues
networking
Network I/O and algorithms
security
Security, encryption
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.
The text was updated successfully, but these errors were encountered: