Put SRTP/ZRTP/all crypto behind __RTP_CRYPTO__ compile flag
The initial idea was to integrate Crypto++ to kvzRTP to make usage very easy but as it turns out, the compilation of that library is quite complex so it's better to use the Makefiles they provide. This means that kvzRTP shall have one extra dependency IF application wishes to use SRTP/ZRTP: Crypto++. The compilation and linking should be quite straight-forward and if application wants to use SRTP/ZRTP it must make the decision when kvzRTP is compiled by providing -D__RTP_CRYPTO__ flag for the compiler and by adding -lcryptopp to link list of the application.
This commit is contained in:
parent
f8c1a3933a
commit
ed937e9957
2
Makefile
2
Makefile
|
@ -3,7 +3,7 @@
|
|||
CXX = g++
|
||||
CXXFLAGS = -g -Wall -Wextra -Wuninitialized -O2 -std=c++11 -Isrc -fPIC #-DNDEBUG
|
||||
SOURCES = $(wildcard src/*.cc)
|
||||
MODULES := src/formats src/mzrtp src/crypto
|
||||
MODULES := src/formats src/mzrtp
|
||||
-include $(patsubst %, %/module.mk, $(MODULES))
|
||||
OBJECTS := $(patsubst %.cc, %.o, $(filter %.cc, $(SOURCES)))
|
||||
|
||||
|
|
26
README.md
26
README.md
|
@ -24,17 +24,35 @@ sudo make install
|
|||
|
||||
You can also use QtCreator to build the library. The library must be built using a 64-bit compiler!
|
||||
|
||||
The library should be linked as a static library to your program.
|
||||
#### SRTP/ZRTP support
|
||||
|
||||
If you want SRTP/ZRTP support, you must compile kvzRTP with `-D__RTP_CRYPTO__`
|
||||
|
||||
## Linking
|
||||
|
||||
#### Linux
|
||||
`-lkvzrtp -lpthread`
|
||||
|
||||
#### Windows
|
||||
`-L<path to library folder> -lkvzrtp -lpthread -lwsock32 -lws2_32`
|
||||
|
||||
#### SRTP/ZRTP support
|
||||
|
||||
If you want SRTP/ZRTP support, you must compile [Crypto++](https://www.cryptopp.com/) and link it as a static library
|
||||
|
||||
#### Linux
|
||||
`-lkvzrtp -lpthread -lcryptopp`
|
||||
|
||||
#### Windows
|
||||
`-L<path to library folder> -lkvzrtp -lpthread -lcryptopp -lwsock32 -lws2_32`
|
||||
|
||||
Linux
|
||||
|
||||
`-lkvzrtp -lpthread`
|
||||
`-lkvzrtp -lpthread -lcryptopp`
|
||||
|
||||
Windows
|
||||
|
||||
`-L<path to library folder> -lkvzrtp -lpthread -lwsock32 -lws2_32`
|
||||
`-L<path to library folder> -lkvzrtp -lpthread -lcryptopp -lwsock32 -lws2_32`
|
||||
|
||||
## Examples
|
||||
|
||||
|
@ -78,6 +96,8 @@ If you have not enabled the system call dispatcher, you don't need to worry abou
|
|||
|
||||
Use `__RTP_SILENT__` to disable all prints
|
||||
|
||||
Use `__RTP_CRYPTO__` to enable SRTP/ZRTP and crypto routines
|
||||
|
||||
Use `NDEBUG` to disable `LOG_DEBUG` which is the most verbose level of logging
|
||||
|
||||
# Adding support for new media types
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "crypto/crypto.hh"
|
||||
#ifdef __RTP_CRYPTO__
|
||||
#include "crypto.hh"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
@ -238,3 +239,4 @@ bool kvz_rtp::crypto::crc32::verify_crc32(uint8_t *input, size_t len, uint32_t o
|
|||
|
||||
return new_crc == old_crc;
|
||||
}
|
||||
#endif
|
|
@ -1,14 +1,15 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#include "3rdparty/cryptopp/aes.h"
|
||||
#include "3rdparty/cryptopp/base32.h"
|
||||
#include "3rdparty/cryptopp/cryptlib.h"
|
||||
#include "3rdparty/cryptopp/dh.h"
|
||||
#include "3rdparty/cryptopp/hmac.h"
|
||||
#include "3rdparty/cryptopp/modes.h"
|
||||
#include "3rdparty/cryptopp/osrng.h"
|
||||
#include "3rdparty/cryptopp/sha.h"
|
||||
#include "3rdparty/cryptopp/crc.h"
|
||||
#include <cryptopp/aes.h>
|
||||
#include <cryptopp/base32.h>
|
||||
#include <cryptopp/cryptlib.h>
|
||||
#include <cryptopp/dh.h>
|
||||
#include <cryptopp/hmac.h>
|
||||
#include <cryptopp/modes.h>
|
||||
#include <cryptopp/osrng.h>
|
||||
#include <cryptopp/sha.h>
|
||||
#include <cryptopp/crc.h>
|
||||
|
||||
namespace kvz_rtp {
|
||||
|
||||
|
@ -128,3 +129,4 @@ namespace kvz_rtp {
|
|||
};
|
||||
};
|
||||
};
|
||||
#endif
|
|
@ -1,203 +0,0 @@
|
|||
SOURCES += \
|
||||
src/crypto/crypto.cc
|
||||
# src/crypto/3rdparty/cryptopp/dh.cc \
|
||||
# src/crypto/3rdparty/cryptopp/integer.cc \
|
||||
# src/crypto/3rdparty/cryptopp/3way.cc \
|
||||
# src/crypto/3rdparty/cryptopp/adhoc.cc \
|
||||
# src/crypto/3rdparty/cryptopp/adler32.cc \
|
||||
# src/crypto/3rdparty/cryptopp/algebra.cc \
|
||||
# src/crypto/3rdparty/cryptopp/algparam.cc \
|
||||
# src/crypto/3rdparty/cryptopp/allocate.cc \
|
||||
# src/crypto/3rdparty/cryptopp/arc4.cc \
|
||||
# src/crypto/3rdparty/cryptopp/aria.cc \
|
||||
# src/crypto/3rdparty/cryptopp/aria_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ariatab.cc \
|
||||
# src/crypto/3rdparty/cryptopp/asn.cc \
|
||||
# src/crypto/3rdparty/cryptopp/authenc.cc \
|
||||
# src/crypto/3rdparty/cryptopp/base32.cc \
|
||||
# src/crypto/3rdparty/cryptopp/base64.cc \
|
||||
# src/crypto/3rdparty/cryptopp/basecode.cc \
|
||||
# src/crypto/3rdparty/cryptopp/bench1.cc \
|
||||
# src/crypto/3rdparty/cryptopp/bench2.cc \
|
||||
# src/crypto/3rdparty/cryptopp/bench3.cc \
|
||||
# src/crypto/3rdparty/cryptopp/bfinit.cc \
|
||||
# src/crypto/3rdparty/cryptopp/blake2b_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/blake2.cc \
|
||||
# src/crypto/3rdparty/cryptopp/blake2s_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/blowfish.cc \
|
||||
# src/crypto/3rdparty/cryptopp/blumshub.cc \
|
||||
# src/crypto/3rdparty/cryptopp/camellia.cc \
|
||||
# src/crypto/3rdparty/cryptopp/cast.cc \
|
||||
# src/crypto/3rdparty/cryptopp/casts.cc \
|
||||
# src/crypto/3rdparty/cryptopp/cbcmac.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ccm.cc \
|
||||
# src/crypto/3rdparty/cryptopp/chacha_avx.cc \
|
||||
# src/crypto/3rdparty/cryptopp/chacha.cc \
|
||||
# src/crypto/3rdparty/cryptopp/chachapoly.cc \
|
||||
# src/crypto/3rdparty/cryptopp/chacha_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/cham.cc \
|
||||
# src/crypto/3rdparty/cryptopp/cham_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/channels.cc \
|
||||
# src/crypto/3rdparty/cryptopp/cmac.cc \
|
||||
# src/crypto/3rdparty/cryptopp/cpu.cc \
|
||||
# src/crypto/3rdparty/cryptopp/crc.cc \
|
||||
# src/crypto/3rdparty/cryptopp/crc_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/cryptlib.cc \
|
||||
# src/crypto/3rdparty/cryptopp/darn.cc \
|
||||
# src/crypto/3rdparty/cryptopp/datatest.cc \
|
||||
# src/crypto/3rdparty/cryptopp/default.cc \
|
||||
# src/crypto/3rdparty/cryptopp/des.cc \
|
||||
# src/crypto/3rdparty/cryptopp/dessp.cc \
|
||||
# src/crypto/3rdparty/cryptopp/dh2.cc \
|
||||
# src/crypto/3rdparty/cryptopp/dll.cc \
|
||||
# src/crypto/3rdparty/cryptopp/dlltest.cc \
|
||||
# src/crypto/3rdparty/cryptopp/donna_32.cc \
|
||||
# src/crypto/3rdparty/cryptopp/donna_64.cc \
|
||||
# src/crypto/3rdparty/cryptopp/donna_sse.cc \
|
||||
# src/crypto/3rdparty/cryptopp/dsa.cc \
|
||||
# src/crypto/3rdparty/cryptopp/eax.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ec2n.cc \
|
||||
# src/crypto/3rdparty/cryptopp/eccrypto.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ecp.cc \
|
||||
# src/crypto/3rdparty/cryptopp/elgamal.cc \
|
||||
# src/crypto/3rdparty/cryptopp/emsa2.cc \
|
||||
# src/crypto/3rdparty/cryptopp/eprecomp.cc \
|
||||
# src/crypto/3rdparty/cryptopp/esign.cc \
|
||||
# src/crypto/3rdparty/cryptopp/files.cc \
|
||||
# src/crypto/3rdparty/cryptopp/filters.cc \
|
||||
# src/crypto/3rdparty/cryptopp/fips140.cc \
|
||||
# src/crypto/3rdparty/cryptopp/fipsalgt.cc \
|
||||
# src/crypto/3rdparty/cryptopp/fipstest.cc \
|
||||
# src/crypto/3rdparty/cryptopp/gcm.cc \
|
||||
# src/crypto/3rdparty/cryptopp/gcm_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/gf2_32.cc \
|
||||
# src/crypto/3rdparty/cryptopp/gf256.cc \
|
||||
# src/crypto/3rdparty/cryptopp/gf2n.cc \
|
||||
# src/crypto/3rdparty/cryptopp/gf2n_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/gfpcrypt.cc \
|
||||
# src/crypto/3rdparty/cryptopp/gost.cc \
|
||||
# src/crypto/3rdparty/cryptopp/gzip.cc \
|
||||
# src/crypto/3rdparty/cryptopp/hc128.cc \
|
||||
# src/crypto/3rdparty/cryptopp/hc256.cc \
|
||||
# src/crypto/3rdparty/cryptopp/hex.cc \
|
||||
# src/crypto/3rdparty/cryptopp/hight.cc \
|
||||
# src/crypto/3rdparty/cryptopp/hmac.cc \
|
||||
# src/crypto/3rdparty/cryptopp/hrtimer.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ida.cc \
|
||||
# src/crypto/3rdparty/cryptopp/idea.cc \
|
||||
# src/crypto/3rdparty/cryptopp/integer.cc \
|
||||
# src/crypto/3rdparty/cryptopp/iterhash.cc \
|
||||
# src/crypto/3rdparty/cryptopp/kalyna.cc \
|
||||
# src/crypto/3rdparty/cryptopp/kalynatab.cc \
|
||||
# src/crypto/3rdparty/cryptopp/keccak_core.cc \
|
||||
# src/crypto/3rdparty/cryptopp/keccak.cc \
|
||||
# src/crypto/3rdparty/cryptopp/keccak_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/lea.cc \
|
||||
# src/crypto/3rdparty/cryptopp/lea_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/luc.cc \
|
||||
# src/crypto/3rdparty/cryptopp/mars.cc \
|
||||
# src/crypto/3rdparty/cryptopp/marss.cc \
|
||||
# src/crypto/3rdparty/cryptopp/md2.cc \
|
||||
# src/crypto/3rdparty/cryptopp/md4.cc \
|
||||
# src/crypto/3rdparty/cryptopp/md5.cc \
|
||||
# src/crypto/3rdparty/cryptopp/misc.cc \
|
||||
# src/crypto/3rdparty/cryptopp/modes.cc \
|
||||
# src/crypto/3rdparty/cryptopp/mqueue.cc \
|
||||
# src/crypto/3rdparty/cryptopp/mqv.cc \
|
||||
# src/crypto/3rdparty/cryptopp/nbtheory.cc \
|
||||
# src/crypto/3rdparty/cryptopp/neon_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/oaep.cc \
|
||||
# src/crypto/3rdparty/cryptopp/osrng.cc \
|
||||
# src/crypto/3rdparty/cryptopp/padlkrng.cc \
|
||||
# src/crypto/3rdparty/cryptopp/panama.cc \
|
||||
# src/crypto/3rdparty/cryptopp/pch.cc \
|
||||
# src/crypto/3rdparty/cryptopp/pkcspad.cc \
|
||||
# src/crypto/3rdparty/cryptopp/poly1305.cc \
|
||||
# src/crypto/3rdparty/cryptopp/polynomi.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ppc_power7.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ppc_power8.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ppc_power9.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ppc_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/pssr.cc \
|
||||
# src/crypto/3rdparty/cryptopp/pubkey.cc \
|
||||
# src/crypto/3rdparty/cryptopp/queue.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rabbit.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rabin.cc \
|
||||
# src/crypto/3rdparty/cryptopp/randpool.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rc2.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rc5.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rc6.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rdrand.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rdtables.cc \
|
||||
# src/crypto/3rdparty/cryptopp/regtest1.cc \
|
||||
# src/crypto/3rdparty/cryptopp/regtest2.cc \
|
||||
# src/crypto/3rdparty/cryptopp/regtest3.cc \
|
||||
# src/crypto/3rdparty/cryptopp/regtest4.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rijndael.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rijndael_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ripemd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rng.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rsa.cc \
|
||||
# src/crypto/3rdparty/cryptopp/rw.cc \
|
||||
# src/crypto/3rdparty/cryptopp/safer.cc \
|
||||
# src/crypto/3rdparty/cryptopp/salsa.cc \
|
||||
# src/crypto/3rdparty/cryptopp/scrypt.cc \
|
||||
# src/crypto/3rdparty/cryptopp/seal.cc \
|
||||
# src/crypto/3rdparty/cryptopp/seed.cc \
|
||||
# src/crypto/3rdparty/cryptopp/serpent.cc \
|
||||
# src/crypto/3rdparty/cryptopp/sha3.cc \
|
||||
# src/crypto/3rdparty/cryptopp/shacal2.cc \
|
||||
# src/crypto/3rdparty/cryptopp/shacal2_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/sha.cc \
|
||||
# src/crypto/3rdparty/cryptopp/shake.cc \
|
||||
# src/crypto/3rdparty/cryptopp/sharkbox.cc \
|
||||
# src/crypto/3rdparty/cryptopp/shark.cc \
|
||||
# src/crypto/3rdparty/cryptopp/sha_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/simeck.cc \
|
||||
# src/crypto/3rdparty/cryptopp/simeck_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/simon128_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/simon64_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/simon.cc \
|
||||
# src/crypto/3rdparty/cryptopp/simple.cc \
|
||||
# src/crypto/3rdparty/cryptopp/skipjack.cc \
|
||||
# src/crypto/3rdparty/cryptopp/sm3.cc \
|
||||
# src/crypto/3rdparty/cryptopp/sm4.cc \
|
||||
# src/crypto/3rdparty/cryptopp/sm4_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/sosemanuk.cc \
|
||||
# src/crypto/3rdparty/cryptopp/speck128_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/speck64_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/speck.cc \
|
||||
# src/crypto/3rdparty/cryptopp/square.cc \
|
||||
# src/crypto/3rdparty/cryptopp/squaretb.cc \
|
||||
# src/crypto/3rdparty/cryptopp/sse_simd.cc \
|
||||
# src/crypto/3rdparty/cryptopp/strciphr.cc \
|
||||
# src/crypto/3rdparty/cryptopp/tea.cc \
|
||||
# src/crypto/3rdparty/cryptopp/test.cc \
|
||||
# src/crypto/3rdparty/cryptopp/tftables.cc \
|
||||
# src/crypto/3rdparty/cryptopp/threefish.cc \
|
||||
# src/crypto/3rdparty/cryptopp/tiger.cc \
|
||||
# src/crypto/3rdparty/cryptopp/tigertab.cc \
|
||||
# src/crypto/3rdparty/cryptopp/ttmac.cc \
|
||||
# src/crypto/3rdparty/cryptopp/tweetnacl.cc \
|
||||
# src/crypto/3rdparty/cryptopp/twofish.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat0.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat10.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat1.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat2.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat3.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat4.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat5.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat6.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat7.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat8.cc \
|
||||
# src/crypto/3rdparty/cryptopp/validat9.cc \
|
||||
# src/crypto/3rdparty/cryptopp/vmac.cc \
|
||||
# src/crypto/3rdparty/cryptopp/wake.cc \
|
||||
# src/crypto/3rdparty/cryptopp/whrlpool.cc \
|
||||
# src/crypto/3rdparty/cryptopp/xed25519.cc \
|
||||
# src/crypto/3rdparty/cryptopp/xtr.cc \
|
||||
# src/crypto/3rdparty/cryptopp/xtrcrypt.cc \
|
||||
# src/crypto/3rdparty/cryptopp/xts.cc \
|
||||
# src/crypto/3rdparty/cryptopp/zdeflate.cc \
|
||||
# src/crypto/3rdparty/cryptopp/zinflate.cc \
|
||||
# src/crypto/3rdparty/cryptopp/zlib.cpp.cc
|
|
@ -1,6 +1,7 @@
|
|||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
|
||||
#include "debug.hh"
|
||||
#include "queue.hh"
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <queue>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
#include "debug.hh"
|
||||
#include "media_stream.hh"
|
||||
|
||||
#include <cstring>
|
||||
#include <errno.h>
|
||||
|
||||
kvz_rtp::media_stream::media_stream(std::string addr, int src_port, int dst_port, rtp_format_t fmt, int flags):
|
||||
socket_(),
|
||||
#ifdef __RTP_CRYPTO__
|
||||
srtp_(nullptr),
|
||||
media_config_(nullptr),
|
||||
ctx_config_()
|
||||
#endif
|
||||
socket_(),
|
||||
ctx_config_(),
|
||||
media_config_(nullptr)
|
||||
{
|
||||
fmt_ = fmt;
|
||||
addr_ = addr;
|
||||
|
@ -57,10 +63,12 @@ rtp_error_t kvz_rtp::media_stream::init()
|
|||
return RTP_OK;
|
||||
}
|
||||
|
||||
#ifdef __RTP_CRYPTO__
|
||||
rtp_error_t kvz_rtp::media_stream::init(kvz_rtp::zrtp& zrtp)
|
||||
{
|
||||
/* TODO: */
|
||||
}
|
||||
#endif
|
||||
|
||||
rtp_error_t kvz_rtp::media_stream::push_frame(uint8_t *data, size_t data_len, int flags)
|
||||
{
|
||||
|
|
|
@ -33,7 +33,9 @@ namespace kvz_rtp {
|
|||
* Return RTP_MEMORY_ERROR if allocation failed
|
||||
*
|
||||
* Other error return codes are defined in {conn,writer,reader,srtp}.hh */
|
||||
#ifdef __RTP_CRYPTO__
|
||||
rtp_error_t init(kvz_rtp::zrtp& zrtp);
|
||||
#endif
|
||||
|
||||
/* Split "data" into 1500 byte chunks and send them to remote
|
||||
*
|
||||
|
@ -109,10 +111,12 @@ namespace kvz_rtp {
|
|||
|
||||
uint32_t key_;
|
||||
|
||||
#ifdef __RTP_CRYPTO__
|
||||
kvz_rtp::srtp *srtp_;
|
||||
#endif
|
||||
kvz_rtp::socket socket_;
|
||||
kvz_rtp::sender *sender_;
|
||||
kvz_rtp::receiver *receiver_;
|
||||
kvz_rtp::srtp *srtp_;
|
||||
kvz_rtp::rtp *rtp_;
|
||||
|
||||
sockaddr_in addr_out_;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
||||
|
@ -121,3 +122,4 @@ rtp_error_t kvz_rtp::zrtp_msg::commit::parse_msg(kvz_rtp::zrtp_msg::receiver& re
|
|||
|
||||
return RTP_OK;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#include "frame.hh"
|
||||
|
@ -48,3 +49,4 @@ namespace kvz_rtp {
|
|||
};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#include <cstring>
|
||||
|
||||
#include "debug.hh"
|
||||
|
@ -73,3 +74,4 @@ rtp_error_t kvz_rtp::zrtp_msg::confack::parse_msg(kvz_rtp::zrtp_msg::receiver& r
|
|||
|
||||
return RTP_OK;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#include "frame.hh"
|
||||
|
@ -33,3 +34,4 @@ namespace kvz_rtp {
|
|||
};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#include <cstring>
|
||||
|
||||
#include "debug.hh"
|
||||
|
@ -154,3 +155,4 @@ rtp_error_t kvz_rtp::zrtp_msg::confirm::parse_msg(kvz_rtp::zrtp_msg::receiver& r
|
|||
delete aes_cfb;
|
||||
return RTP_OK;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#include "frame.hh"
|
||||
|
@ -51,3 +52,4 @@ namespace kvz_rtp {
|
|||
};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#include "../util.hh"
|
||||
|
@ -109,3 +110,4 @@ namespace kvz_rtp {
|
|||
};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#include <cstring>
|
||||
|
||||
#include "debug.hh"
|
||||
|
@ -165,3 +166,4 @@ rtp_error_t kvz_rtp::zrtp_msg::dh_key_exchange::parse_msg(kvz_rtp::zrtp_msg::rec
|
|||
|
||||
return RTP_OK;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#include "frame.hh"
|
||||
|
@ -44,3 +45,4 @@ namespace kvz_rtp {
|
|||
};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#include <cstring>
|
||||
|
||||
#include "debug.hh"
|
||||
|
@ -65,3 +66,4 @@ rtp_error_t kvz_rtp::zrtp_msg::error::parse_msg(kvz_rtp::zrtp_msg::receiver& rec
|
|||
|
||||
return RTP_OK;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#include "util.hh"
|
||||
|
@ -31,3 +32,4 @@ namespace kvz_rtp {
|
|||
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#include <cstring>
|
||||
|
||||
#include "debug.hh"
|
||||
|
@ -141,3 +142,4 @@ rtp_error_t kvz_rtp::zrtp_msg::hello::parse_msg(kvz_rtp::zrtp_msg::receiver& rec
|
|||
|
||||
return RTP_OK;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#include "frame.hh"
|
||||
|
@ -54,3 +55,4 @@ namespace kvz_rtp {
|
|||
};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#include <cstring>
|
||||
|
||||
#include "debug.hh"
|
||||
|
@ -63,3 +64,4 @@ rtp_error_t kvz_rtp::zrtp_msg::hello_ack::parse_msg(kvz_rtp::zrtp_msg::receiver&
|
|||
|
||||
return RTP_OK;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#include "util.hh"
|
||||
|
@ -30,3 +31,4 @@ namespace kvz_rtp {
|
|||
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#ifdef _WIN32
|
||||
#include <winsock2.h>
|
||||
#include <mswsock.h>
|
||||
|
@ -12,7 +13,7 @@
|
|||
|
||||
#include "debug.hh"
|
||||
#include "util.hh"
|
||||
#include "crypto/crypto.hh"
|
||||
#include "crypto.hh"
|
||||
#include "mzrtp/defines.hh"
|
||||
#include "mzrtp/dh_kxchng.hh"
|
||||
#include "mzrtp/commit.hh"
|
||||
|
@ -212,3 +213,4 @@ ssize_t kvz_rtp::zrtp_msg::receiver::get_msg(void *ptr, size_t len)
|
|||
memcpy(ptr, mem_, cpy_len);
|
||||
return rlen_;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
namespace kvz_rtp {
|
||||
|
@ -28,3 +29,4 @@ namespace kvz_rtp {
|
|||
};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <mutex>
|
||||
|
||||
#include "frame.hh"
|
||||
#include "rtp.hh"
|
||||
#include "runner.hh"
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
#include "debug.hh"
|
||||
#include "session.hh"
|
||||
|
||||
kvz_rtp::session::session(std::string addr):
|
||||
#ifdef __RTP_CRYPTO__
|
||||
zrtp_(),
|
||||
#endif
|
||||
addr_(addr)
|
||||
{
|
||||
}
|
||||
|
@ -15,6 +18,7 @@ kvz_rtp::media_stream *kvz_rtp::session::create_stream(int r_port, int s_port, r
|
|||
{
|
||||
kvz_rtp::media_stream *stream = new kvz_rtp::media_stream(addr_, r_port, s_port, fmt, flags);
|
||||
|
||||
#ifdef __RTP_CRYPTO__
|
||||
int zrtp_flags = (RCE_SRTP | RCE_SRTP_KMNGMNT_ZRTP);
|
||||
|
||||
if ((flags & zrtp_flags) == zrtp_flags) {
|
||||
|
@ -23,11 +27,15 @@ kvz_rtp::media_stream *kvz_rtp::session::create_stream(int r_port, int s_port, r
|
|||
return nullptr;
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
if (stream->init() != RTP_OK) {
|
||||
LOG_ERROR("Failed to initialize media stream %s:%d/%d", addr_.c_str(), r_port, s_port);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#ifdef __RTP_CRYPTO__
|
||||
}
|
||||
#endif
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,9 @@ namespace kvz_rtp {
|
|||
|
||||
private:
|
||||
/* Each RTP multimedia session shall have one ZRTP session from which all session are derived */
|
||||
#ifdef __RTP_CRYPTO__
|
||||
kvz_rtp::zrtp zrtp_;
|
||||
#endif
|
||||
|
||||
/* Each RTP multimedia session is always IP-specific */
|
||||
std::string addr_;
|
||||
|
|
|
@ -24,8 +24,7 @@ kvz_rtp::socket::socket():
|
|||
recv_handler_(nullptr),
|
||||
sendto_handler_(nullptr),
|
||||
sendtov_handler_(nullptr),
|
||||
socket_(-1),
|
||||
srtp_(nullptr)
|
||||
socket_(-1)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -36,68 +35,6 @@ kvz_rtp::socket::~socket()
|
|||
#else
|
||||
closesocket(socket_);
|
||||
#endif
|
||||
|
||||
delete srtp_;
|
||||
}
|
||||
|
||||
rtp_error_t kvz_rtp::socket::setup_srtp(uint32_t ssrc)
|
||||
{
|
||||
if (srtp_) {
|
||||
LOG_DEBUG("SRTP has already been initialized");
|
||||
return RTP_INITIALIZED;
|
||||
}
|
||||
|
||||
if ((srtp_ = new kvz_rtp::srtp(SRTP)) == nullptr) {
|
||||
LOG_DEBUG("Failed to allocate SRTP context!");
|
||||
return RTP_MEMORY_ERROR;
|
||||
}
|
||||
|
||||
return srtp_->init_zrtp(ssrc, socket_, addr_);
|
||||
}
|
||||
|
||||
rtp_error_t kvz_rtp::socket::setup_srtcp(uint32_t ssrc)
|
||||
{
|
||||
if (srtp_) {
|
||||
LOG_DEBUG("SRTP has already been initialized");
|
||||
return RTP_INITIALIZED;
|
||||
}
|
||||
|
||||
if ((srtp_ = new kvz_rtp::srtp(SRTCP)) == nullptr) {
|
||||
LOG_DEBUG("Failed to allocate SRTP context!");
|
||||
return RTP_MEMORY_ERROR;
|
||||
}
|
||||
|
||||
return srtp_->init_zrtp(ssrc, socket_, addr_);
|
||||
}
|
||||
|
||||
rtp_error_t kvz_rtp::socket::setup_srtp(uint32_t ssrc, std::pair<uint8_t *, size_t>& key)
|
||||
{
|
||||
if (srtp_) {
|
||||
LOG_DEBUG("SRTP has already been initialized");
|
||||
return RTP_INITIALIZED;
|
||||
}
|
||||
|
||||
if ((srtp_ = new kvz_rtp::srtp(SRTP)) == nullptr) {
|
||||
LOG_DEBUG("Failed to allocate SRTP context!");
|
||||
return RTP_MEMORY_ERROR;
|
||||
}
|
||||
|
||||
return srtp_->init_user(ssrc, key);
|
||||
}
|
||||
|
||||
rtp_error_t kvz_rtp::socket::setup_srtcp(uint32_t ssrc, std::pair<uint8_t *, size_t>& key)
|
||||
{
|
||||
if (srtp_) {
|
||||
LOG_DEBUG("SRTP has already been initialized");
|
||||
return RTP_INITIALIZED;
|
||||
}
|
||||
|
||||
if ((srtp_ = new kvz_rtp::srtp(SRTCP)) == nullptr) {
|
||||
LOG_DEBUG("Failed to allocate SRTP context!");
|
||||
return RTP_MEMORY_ERROR;
|
||||
}
|
||||
|
||||
return srtp_->init_user(ssrc, key);
|
||||
}
|
||||
|
||||
rtp_error_t kvz_rtp::socket::init(short family, int type, int protocol)
|
||||
|
|
|
@ -32,38 +32,6 @@ namespace kvz_rtp {
|
|||
socket();
|
||||
~socket();
|
||||
|
||||
/* Setup Secure RTP/RTCP connection
|
||||
*
|
||||
* The process consists of initializing ZRTP context and
|
||||
* exchaning keys with remote participant and finally
|
||||
* initializing the SRTP context.
|
||||
*
|
||||
* NOTE: This function must be called **after** socket
|
||||
* initialization but before any media exchange happens!
|
||||
*
|
||||
* Return RTP_OK if SRTP setup was successful
|
||||
* Return RTP_NOT_SUPPORTED if remote does not support {SRTP,SRTCP}/ZRTP
|
||||
* Return RTP_MEMORY_ERROR if allocation failed
|
||||
* Return RTP_INITIALIZED if SRTP has already been initialized for this socket
|
||||
* Return RTP_GENERIC_ERROR for any other error */
|
||||
rtp_error_t setup_srtp(uint32_t ssrc);
|
||||
rtp_error_t setup_srtcp(uint32_t ssrc);
|
||||
|
||||
/* Setup Secure RTP/RTCP connection
|
||||
*
|
||||
* The process consists of initializing SRTP context
|
||||
* using the master key provided by the user (ie. no ZRTP)
|
||||
*
|
||||
* NOTE 2: This function must be called **after** socket
|
||||
* initialization but before any media exchange happens!
|
||||
*
|
||||
* Return RTP_OK if SRTP setup was successful
|
||||
* Return RTP_MEMORY_ERROR if allocation failed
|
||||
* Return RTP_INITIALIZED if SRTP has already been initialized for this socket
|
||||
* Return RTP_GENERIC_ERROR for any other error */
|
||||
rtp_error_t setup_srtp(uint32_t ssrc, std::pair<uint8_t *, size_t>& key);
|
||||
rtp_error_t setup_srtcp(uint32_t ssrc, std::pair<uint8_t *, size_t>& key);
|
||||
|
||||
/* Create socket using "family", "type" and "protocol"
|
||||
*
|
||||
* NOTE: Only family AF_INET (ie. IPv4) is supported
|
||||
|
@ -193,8 +161,6 @@ namespace kvz_rtp {
|
|||
socket_t socket_;
|
||||
sockaddr_in addr_;
|
||||
|
||||
kvz_rtp::srtp *srtp_;
|
||||
|
||||
#ifdef _WIN32
|
||||
WSABUF buffers_[MAX_BUFFER_COUNT];
|
||||
#else
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#include "srtp.hh"
|
||||
|
||||
kvz_rtp::srtp::srtp(int type):
|
||||
|
@ -54,3 +55,4 @@ rtp_error_t kvz_rtp::srtp::decrypt(uint8_t *buf, size_t len)
|
|||
|
||||
return RTP_OK;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -73,3 +74,4 @@ namespace kvz_rtp {
|
|||
secure_context *s_ctx;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#include <cstring>
|
||||
#include <thread>
|
||||
|
||||
#include "debug.hh"
|
||||
#include "crypto/crypto.hh"
|
||||
#include "crypto.hh"
|
||||
#include "random.hh"
|
||||
#include "zrtp.hh"
|
||||
|
||||
|
@ -683,3 +684,4 @@ rtp_error_t kvz_rtp::zrtp::init_msm(uint32_t ssrc, socket_t& socket, sockaddr_in
|
|||
|
||||
return RTP_TIMEOUT;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef __RTP_CRYPTO__
|
||||
#pragma once
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -11,7 +12,7 @@
|
|||
|
||||
#include <vector>
|
||||
|
||||
#include "crypto/crypto.hh"
|
||||
#include "crypto.hh"
|
||||
#include "mzrtp/defines.hh"
|
||||
#include "mzrtp/receiver.hh"
|
||||
|
||||
|
@ -272,3 +273,4 @@ namespace kvz_rtp {
|
|||
zrtp_session_t session_;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue