コード例 #1
0
        /// <summary>
        /// Decrypt a packet's data
        /// </summary>
        public static int DecryptPacketData(NetcodePacketHeader header, ulong protocolID, byte[] packetData, int packetDataLen, byte[] key, byte[] outBuffer)
        {
            byte[] additionalData = BufferPool.GetBuffer(Defines.NETCODE_VERSION_INFO_BYTES + 8 + 1);
            using (var writer = ByteArrayReaderWriter.Get(additionalData))
            {
                writer.WriteASCII(Defines.NETCODE_VERSION_INFO_STR);
                writer.Write(protocolID);
                writer.Write(header.ReadSequenceByte);
            }

            byte[] nonce = BufferPool.GetBuffer(12);
            using (var writer = ByteArrayReaderWriter.Get(nonce))
            {
                writer.Write((UInt32)0);
                writer.Write(header.SequenceNumber);
            }

            int ret;

            try
            {
                ret = CryptoUtils.Decrypt(packetData, 0, packetDataLen, additionalData, key, nonce, outBuffer);
            }
            catch (Exception e)
            {
                BufferPool.ReturnBuffer(additionalData);
                BufferPool.ReturnBuffer(nonce);
                throw e;
            }

            BufferPool.ReturnBuffer(additionalData);
            BufferPool.ReturnBuffer(nonce);

            return(ret);
        }
コード例 #2
0
ファイル: PacketIO.cs プロジェクト: fabbbiob/Netcode.IO.NET
        /// <summary>
        /// Read and decrypt packet data into an output buffer
        /// </summary>
        public static int ReadPacketData(NetcodePacketHeader header, ByteArrayReaderWriter stream, int length, ulong protocolID, byte[] key, byte[] outputBuffer)
        {
            byte[] encryptedBuffer = BufferPool.GetBuffer(2048);
            stream.ReadBytesIntoBuffer(encryptedBuffer, length);

            int decryptedBytes;

            try
            {
                decryptedBytes = DecryptPacketData(header, protocolID, encryptedBuffer, length, key, outputBuffer);
            }
            catch (Exception e)
            {
                BufferPool.ReturnBuffer(encryptedBuffer);
                throw e;
            }

            return(decryptedBytes);
        }