12345678910111213141516171819202122232425262728293031323334353637383940 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Security.Cryptography;
- namespace UdPunching
- {
- public static class TransferCodec
- {
- public static readonly Guid InvalidPeerId = new Guid("ffffffff-ffff-ffff-ffff-ffffffffffff");
- // [0...15] GUID PeerId
- // [16..19] Encrypted data length prefix (LeInt32)
- // [20..END] Encrypted data content
- public static Guid ReadId(byte[] recvData)
- {
- return new Guid(recvData.Take(16).ToArray());
- }
- public static byte[] DecodeData(RSACryptoServiceProvider cryptoProvider, byte[] recvData)
- {
- var len = recvData.ToLeInt32(16);
- return cryptoProvider.Decrypt(recvData.Skip(20).Take(len).ToArray(), false);
- }
- public static byte[] Encode(RSACryptoServiceProvider cryptoProvider, Guid id, byte[] data)
- {
- var idBytes = id.ToByteArray(); // 16
- var encryptedBytes = cryptoProvider.Encrypt(data, false);
- var lst = new List<byte>(idBytes.Length + encryptedBytes.Length);
- lst.AddRange(idBytes);
- lst.AddRange(encryptedBytes.Length.ToLeBytes()); //4
- lst.AddRange(encryptedBytes);
- return lst.ToArray();
- }
- }
- }
|