using PCC.App.Networking; using System.Security.Cryptography; namespace PCC.App.Security; public class EncryptedTcpPeer(RSA senderPri, RSA destPub, TcpPeer peer) { public async Task SendBlockAsync(ReadOnlyMemory block) { var eb = RsaUtility.EncryptAndSignature(destPub, block.Span, senderPri); await peer.SendBlockAsync(eb); } public async Task SendBlockAsync(byte[] block) { var eb = RsaUtility.EncryptAndSignature(destPub, block, senderPri); await peer.SendBlockAsync(eb); } public async Task RxBlockAsync(CancellationToken? timeOut = null) { var rx = await peer.RxBlockAsync(timeOut); if (rx == null) return null; var db = RsaUtility.DecryptAndVerifySignature(senderPri, rx, destPub); return db; } public void Disconnect() { peer.Disconnect(); } }