//public static bool SendData(string RTUid, string address, string message, byte[] signature) //{ // // If RTU is not connected on an input tag, break the operation // if (connectedRTUs[RTUid] == null) // { // return false; // } // // Read public key // CspParameters csp = new CspParameters(); // RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp); // try // { // rsa.FromXmlString(RTUkeys[RTUid]); // } catch // { // return false; // } // rsa.PersistKeyInCsp = true; // // Compute hash value // byte[] hashValue = ComputeHashValue(message); // if (VerifyMessage(hashValue, signature, rsa)) // { // RealTimeDriver.addresses[address] = double.Parse(message); // return true; // } // return false; //} public string ApplyOnSystem(string id) { csp.KeyContainerName = "KeyContainerName"; csp.Flags = CspProviderFlags.UseMachineKeyStore; rsa = new RSACryptoServiceProvider(csp); rsa.PersistKeyInCsp = true; string publicKey = rsa.ToXmlString(false); string retVal = ""; if (!RTUkeys.ContainsKey(id)) { if (RealTimeDriver.addresses.ContainsValue(-1)) { foreach (KeyValuePair <string, double> pair in RealTimeDriver.addresses) { if (pair.Value == -1) { retVal = pair.Key; RealTimeDriver.addresses[pair.Key] = 0; break; } } RTU rtu = new RTU(); rtu.rtuID = id; rtu.publicKey = publicKey; rtu.address = retVal; if (id.StartsWith("DI")) { rtu.type = true; } else { rtu.type = false; } rtus.Add(rtu); RTUkeys[id] = publicKey; connectedRTUs[id] = null; RTUIdAddressMap[id] = retVal; return(retVal); } else { retVal = "-1"; return(retVal); } } else { retVal = "0"; return(retVal); } }
public bool DeleteRTU(string RTUid) { foreach (RTU rtu in rtus) { if (rtu.rtuID.Equals(RTUid)) { rtuThreads[rtu.rtuID].Abort(); rtuThreads.Remove(rtu.rtuID); RTUkeys.Remove(rtu.rtuID); RTUIdAddressMap.Remove(rtu.rtuID); connectedRTUs.Remove(rtu.rtuID); RealTimeDriver.addresses[rtu.address] = -1; rtus.Remove(rtu); return(true); } } return(false); }