#ifndef _METERPRETER_SOURCE_COMMON_PACKET_ENCRYPTION_H
#define _METERPRETER_SOURCE_COMMON_PACKET_ENCRYPTION_H

#include <Windows.h>

typedef struct _Aes256Key
{
	BLOBHEADER header;
	DWORD length;
	BYTE key[256/8];
} Aes256Key;

typedef struct _PacketEncryptionContext
{
	HCRYPTPROV provider;
	HCRYPTKEY aes_key;
	int provider_idx;
	BOOL valid;
	Aes256Key key_data;
	BOOL enabled;
} PacketEncryptionContext;

typedef struct _Remote Remote;
typedef struct _Packet Packet;

DWORD encrypt_packet(Remote* remote, Packet* packet, LPBYTE* buffer, LPDWORD bufferSize);
DWORD request_negotiate_aes_key(Remote* remote, Packet* packet);
DWORD free_encryption_context(Remote* remote);

#endif