/// <summary> /// 패킷을 보낼 수 있도록 가공한다. (zlib 압축 데이터 여기서 생성) /// </summary> /// <param name="key">Encryption key</param> /// <param name="hmacKey">HMAC generation key</param> /// <param name="prefix">The 6 bytes between the packet size and the IV</param> public void CompressAndAssemble(byte[] key, byte[] hmacKey, byte[] prefix, int count) { // 버퍼를 복구할 수 있도록. _buffer_before_assemble = _buffer; byte[] data = Compression.Compress(_buffer); byte[] Op = BitConverter.GetBytes((short)Opcode); byte[] Len = BitConverter.GetBytes((int)data.Length + 4); // 버퍼 + 압축내용 Array.Reverse(Op); Array.Reverse(Len); byte[] TempData; TempData = BytesUtil.ConcatBytes(Op, Len); TempData = BytesUtil.ConcatBytes(TempData, BitConverter.GetBytes((bool)true)); // 압축임 TempData = BytesUtil.ConcatBytes(TempData, BitConverter.GetBytes((int)_buffer.Length)); // 실제 크기 _buffer = BytesUtil.ConcatBytes(TempData, data); byte[] IV = CryptoGenerators.GenerateIV(); byte[] dataToAssemble = BytesUtil.ConcatBytes( BytesUtil.ConcatBytes(prefix, BitConverter.GetBytes(count)), BytesUtil.ConcatBytes(IV, CryptoFunctions.EncryptPacket(_buffer, key, IV))); _buffer = CryptoFunctions.ClearPacket(dataToAssemble, hmacKey); }