mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-12 03:04:20 +00:00
d83a3d71bc
Merge in RedPhone // FREEBIE
50 lines
1020 B
C++
50 lines
1020 B
C++
#ifndef __STRP_STREAM_H__
|
|
#define __STRP_STREAM_H__
|
|
|
|
#include <openssl/aes.h>
|
|
#include <openssl/hmac.h>
|
|
|
|
#define SRTP_AES_KEY_SIZE 16
|
|
#define SRTP_SALT_SIZE 14
|
|
#define SRTP_MAC_KEY_SIZE 20
|
|
|
|
#define SRTP_MAC_SIZE 20
|
|
|
|
#include "RtpPacket.h"
|
|
|
|
class SrtpStreamParameters {
|
|
|
|
public:
|
|
uint8_t cipherKey[SRTP_AES_KEY_SIZE];
|
|
uint8_t macKey[SRTP_MAC_KEY_SIZE];
|
|
uint8_t salt[SRTP_SALT_SIZE];
|
|
|
|
SrtpStreamParameters(uint8_t *cipherKeyPtr, uint8_t* macKeyPtr, uint8_t *saltPtr)
|
|
{
|
|
memcpy(cipherKey, cipherKeyPtr, SRTP_AES_KEY_SIZE);
|
|
memcpy(macKey, macKeyPtr, SRTP_MAC_KEY_SIZE);
|
|
memcpy(salt, saltPtr, SRTP_SALT_SIZE);
|
|
}
|
|
|
|
};
|
|
|
|
class SrtpStream {
|
|
|
|
private:
|
|
SrtpStreamParameters *parameters;
|
|
AES_KEY key;
|
|
|
|
void setIv(int64_t logicalSequence, uint32_t ssrc, uint8_t *salt, uint8_t *iv);
|
|
|
|
public:
|
|
|
|
SrtpStream(SrtpStreamParameters *parameters);
|
|
~SrtpStream();
|
|
|
|
int init();
|
|
int decrypt(RtpPacket &packet, int64_t logicalSequence);
|
|
int encrypt(RtpPacket &packet, int64_t logicalSequence);
|
|
|
|
};
|
|
|
|
#endif |