using System.Security.Cryptography; using PCC.App.Security; using PCC.Common.AssemblyInject.Interfaces; using PCC.Common.EventBus; using PCC.App.Tpm; namespace PCC.DevClient; internal class DevClientApp(DevClientPccConfigManager configManager, TrustedPeerManager tpm, IEventBus eventBus, ILogger logger) : IAssemblyInjectSyncInitStarStop { public void Init() { logger.LogInformation("init"); //eventBus.Subscript(OnConnected); //eventBus.Subscript(OnRx); //eventBus.Subscript(OnDx); //eventBus.Subscript(OnXx); } public void Start() { logger.LogInformation("starting..."); byte[] myPri, myPub; if (configManager.Instance.MyKeyPrivate == null || configManager.Instance.MyKeyPublic == null) { logger.LogInformation("Generating 8192bit RSA key... be patient, may take up to 30 seconds..."); (myPub, myPri) = RsaUtility.GeneratePKCS1(8192); configManager.Instance.MyKeyPrivate = Convert.ToBase64String(myPri, Base64FormattingOptions.None); configManager.Instance.MyKeyPublic = Convert.ToBase64String(myPub, Base64FormattingOptions.None); configManager.Save(); logger.LogInformation("RSA key generated and saved."); } else { myPri = Convert.FromBase64String(configManager.Instance.MyKeyPrivate); myPub = Convert.FromBase64String(configManager.Instance.MyKeyPublic); } //eventBus.Publish(new TrustedPeerManager.TPM_EVT_CMD_INIT(myPub, myPri)); //logger.LogInformation("Your public key for share to trusted peer: " + configManager.Instance.MyKeyPublic); //if (configManager.Instance.TrustPeerKeyPub == null || configManager.Instance.TrustPeerHost == null || configManager.Instance.TrustPeerPort == null) //{ // logger.LogError($"Missing config one of `{nameof(configManager.Instance.TrustPeerKeyPub)}' or `{nameof(configManager.Instance.TrustPeerHost)}' or `{nameof(configManager.Instance.TrustPeerPort)}', please obtain from trusted peer, HALT"); // return; //} //var tpk = Convert.FromBase64String(configManager.Instance.TrustPeerKeyPub); //var tph = configManager.Instance.TrustPeerHost!; //var tpp = configManager.Instance.TrustPeerPort!.Value; //var peerId = tpm.AddPeer(tpk, tph, tpp); //tpm.ConnectToPeerAsync(peerId); } //private void OnConnected(TrustedPeerManager.TPM_EVT_PEER_CX obj) //{ // logger.LogInformation("Connected"); // var payload = "Brr连上了?"u8.ToArray(); // logger.LogInformation($"Send payload {Convert.ToHexString(SHA256.HashData(payload))}"); // tpm.SendToPeer(obj.PeerId, payload); //} //private void OnRx(TrustedPeerManager.TPM_EVT_PEER_RX obj) //{ // logger.LogInformation("Rx:" + Convert.ToHexString(obj.payload.Span)); //} //private void OnDx(TrustedPeerManager.TPM_EVT_PEER_DX obj) //{ // logger.LogInformation("Dx:" + obj.PeerId); //} //private void OnXx(TrustedPeerManager.TPM_EVT_PEER_XX obj) //{ // logger.LogWarning($"有内鬼,终止交易! {obj.Kind} {obj.PeerId}"); //} public void Stop() { logger.LogInformation("stop"); // eventBus.Publish(); } }