示例#1
0
        //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);
            }
        }
示例#2
0
        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);
        }