EncryptedTcpPeer.cs 894 B

1234567891011121314151617181920212223242526272829303132
  1. using PCC.App.Networking;
  2. using System.Security.Cryptography;
  3. namespace PCC.App.Security;
  4. public class EncryptedTcpPeer(RSA senderPri, RSA destPub, TcpPeer peer)
  5. {
  6. public async Task SendBlockAsync(ReadOnlyMemory<byte> block)
  7. {
  8. var eb = RsaUtility.EncryptAndSignature(destPub, block.Span, senderPri);
  9. await peer.SendBlockAsync(eb);
  10. }
  11. public async Task SendBlockAsync(byte[] block)
  12. {
  13. var eb = RsaUtility.EncryptAndSignature(destPub, block, senderPri);
  14. await peer.SendBlockAsync(eb);
  15. }
  16. public async Task<byte[]?> RxBlockAsync(CancellationToken? timeOut = null)
  17. {
  18. var rx = await peer.RxBlockAsync(timeOut);
  19. if (rx == null) return null;
  20. var db = RsaUtility.DecryptAndVerifySignature(senderPri, rx, destPub);
  21. return db;
  22. }
  23. public void Disconnect()
  24. {
  25. peer.Disconnect();
  26. }
  27. }