/// <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")); }