Skip to content
Snippets Groups Projects
Commit e2fc783e authored by Alexandre Savard's avatar Alexandre Savard
Browse files

[#1722] Use differnt crypto context for input and output in SRTP session

parent 81f3524d
No related branches found
No related tags found
No related merge requests found
...@@ -25,6 +25,12 @@ ...@@ -25,6 +25,12 @@
#include <cstring> #include <cstring>
#include <cerrno> #include <cerrno>
static uint8 mk[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
static uint8 ms[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d };
namespace sfl namespace sfl
{ {
...@@ -35,18 +41,19 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : ...@@ -35,18 +41,19 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) :
_debug ("AudioSrtpSession initialized"); _debug ("AudioSrtpSession initialized");
initializeMasterKey(); initializeMasterKey();
initializeMasterSalt(); initializeMasterSalt();
initializeCryptoContext(); initializeInputCryptoContext();
txCryptoCtx->deriveSrtpKeys(0); initializeOutputCryptoContext();
outputCryptoCtx->deriveSrtpKeys(0);
setInQueueCryptoContext(txCryptoCtx); setInQueueCryptoContext(inputCryptoCtx);
setOutQueueCryptoContext(txCryptoCtx); setOutQueueCryptoContext(outputCryptoCtx);
} }
void AudioSrtpSession::initializeMasterKey(void) void AudioSrtpSession::initializeMasterKey(void)
{ {
_masterKey = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, for(int i = 0; i < 16; i++)
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; _masterKey[i] = mk[i];
return; return;
} }
...@@ -54,17 +61,35 @@ void AudioSrtpSession::initializeMasterKey(void) ...@@ -54,17 +61,35 @@ void AudioSrtpSession::initializeMasterKey(void)
void AudioSrtpSession::initializeMasterSalt(void) void AudioSrtpSession::initializeMasterSalt(void)
{ {
_masterSalt = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, for(int i = 0; i < 16; i++)
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; _masterSalt[i] = ms[i];
return; return;
} }
void AudioSrtpSession::initializeCryptoContext(void) void AudioSrtpSession::initializeInputCryptoContext(void)
{
inputCryptoCtx = new ost::CryptoContext(0x12345678,
0, // roc,
0L, // keydr,
SrtpEncryptionAESCM, // encryption algo
SrtpAuthenticationSha1Hmac, // authtication algo
_masterKey, // Master Key
128 / 8, // Master Key length
_masterSalt, // Master Salt
112 / 8, // Master Salt length
128 / 8, // encryption keyl
160 / 8, // authentication key len
112 / 8, // session salt len
80 / 8); // authentication tag len
}
void AudioSrtpSession::initializeOutputCryptoContext(void)
{ {
txCryptoCtx = new ost::CryptoContext(0x12345678, outputCryptoCtx = new ost::CryptoContext(0x12345678,
0, // roc, 0, // roc,
0L, // keydr, 0L, // keydr,
SrtpEncryptionAESCM, // encryption algo SrtpEncryptionAESCM, // encryption algo
......
...@@ -47,13 +47,17 @@ namespace sfl { ...@@ -47,13 +47,17 @@ namespace sfl {
void initializeMasterSalt(void); void initializeMasterSalt(void);
void initializeCryptoContext(void); void initializeInputCryptoContext(void);
void initializeOutputCryptoContext(void);
uint8 _masterKey[16]; uint8 _masterKey[16];
uint8 _masterSalt[14]; uint8 _masterSalt[14];
ost::CryptoContext* txCryptoCtx; ost::CryptoContext* inputCryptoCtx;
ost::CryptoContext* outputCryptoCtx;
}; };
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment