Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        protected byte[] BuildMessage(InternalData.InternalMessageId id, byte[] data)
        {
            InternalData internalMsg = new InternalData();

            internalMsg.id     = id;
            internalMsg.length = data.Length;
            internalMsg.data   = data;
            return(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(internalMsg)));
        }
        private async Task <string> SendEncryptedData(InternalData.InternalMessageId messageId, byte[] customData, CancellationToken ctoken)
        {
            byte[] encryptedData = EncryptData(applicantPublicKey, customData);

            List <byte[]> chunks = new List <byte[]>();

            SplitMessage(encryptedData, ChunkSize, ref chunks);

            byte[] numChunks = BitConverter.GetBytes(chunks.Count);
            for (int i = 0; i < chunks.Count; i++)
            {
                byte[] chunkId = BitConverter.GetBytes(i);
                byte[] length  = BitConverter.GetBytes(chunks[i].Length);
                byte[] dtsData = new byte[chunks[i].Length + 4 + 4 + 4];
                Buffer.BlockCopy(chunkId, 0, dtsData, 0, 4);
                Buffer.BlockCopy(numChunks, 0, dtsData, 4, 4);
                Buffer.BlockCopy(length, 0, dtsData, 8, 4);
                Buffer.BlockCopy(chunks[i], 0, dtsData, 12, chunks[i].Length);
                byte[] data = BuildMessage(messageId, dtsData);
                var    res  = await SendMessage(data, ctoken);
            }
            return(await Task.FromResult <string>("Message sent"));
        }