Signal-Android/jni/redphone/SrtpStream.h

50 wiersze
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