コード例 #1
0
        private bool ValidateKexReportEcho(byte[] echoCmd)
        {
            bool ret = false;

            if (_KEXReportKEXSet.Data != null && echoCmd != null)
            {
                COMMAND_CLASS_SECURITY_2.KEX_REPORT kexReport = _KEXReportKEXSet.Data;
                kexReport.properties1.echo = 1;
                ret = echoCmd.SequenceEqual((byte[])kexReport);
            }
            return(ret);
        }
コード例 #2
0
        private void OnKEXGet(StartActionUnit ou)
        {
            kexReportStart = DateTime.Now;
            SpecificResult.SubstituteStatus  = SubstituteStatuses.Failed;
            _securityManagerInfo.IsInclusion = true;

            _KexFailCancel.NodeId       = NodeId;
            _KexFailCancel.BridgeNodeId = VirtualNodeId;

            _KEXReportKEXSet.DestNodeId = NodeId;
            _KEXReportKEXSet.SrcNodeId  = VirtualNodeId;
            if (VirtualNodeId == 0)
            {
                _peerNodeId = new InvariantPeerNodeId(_securityManagerInfo.Network.NodeId, NodeId);
            }
            else
            {
                _peerNodeId = new InvariantPeerNodeId(VirtualNodeId, NodeId);
            }
            var cmd = new COMMAND_CLASS_SECURITY_2.KEX_REPORT();

            _isClientSideAuthRequested = _securityManagerInfo.TestEnableClientSideAuthS2;
            cmd.properties1            = new COMMAND_CLASS_SECURITY_2.KEX_REPORT.Tproperties1()
            {
                requestCsa = _isClientSideAuthRequested ? (byte)1 : (byte)0
            };
            byte keysToRequest = (byte)(NetworkKeyS2Flags.S2Class0 |
                                        NetworkKeyS2Flags.S2Class1 |
                                        NetworkKeyS2Flags.S2Class2 |
                                        NetworkKeyS2Flags.S0);

            if (!_securityManagerInfo.Network.IsEnabledS0)
            {
                keysToRequest = (byte)(keysToRequest & ~(byte)(NetworkKeyS2Flags.S0));
            }
            if (!_securityManagerInfo.Network.IsEnabledS2_UNAUTHENTICATED)
            {
                keysToRequest = (byte)(keysToRequest & ~(byte)(NetworkKeyS2Flags.S2Class0));
            }
            if (!_securityManagerInfo.Network.IsEnabledS2_AUTHENTICATED)
            {
                keysToRequest = (byte)(keysToRequest & ~(byte)(NetworkKeyS2Flags.S2Class1));
            }
            if (!_securityManagerInfo.Network.IsEnabledS2_ACCESS)
            {
                keysToRequest = (byte)(keysToRequest & ~(byte)(NetworkKeyS2Flags.S2Class2));
            }

            cmd.requestedKeys         = keysToRequest;
            cmd.supportedEcdhProfiles = 1;
            cmd.supportedKexSchemes   = 2;
            _KEXReportKEXSet.Data     = cmd;
            #region KEXReport
            if (_securityManagerInfo.TestFramesS2.ContainsKey(SecurityS2TestFrames.KEXReport))
            {
                var testFrame = _securityManagerInfo.TestFramesS2[SecurityS2TestFrames.KEXReport];
                if (testFrame.Command != null && testFrame.Command.Length > 5 &&
                    testFrame.Command[0] == COMMAND_CLASS_SECURITY_2.ID && testFrame.Command[1] == COMMAND_CLASS_SECURITY_2.KEX_REPORT.ID)
                {
                    COMMAND_CLASS_SECURITY_2.KEX_REPORT tmp = testFrame.Command;
                    keysToRequest = tmp.requestedKeys;
                }
                _securityTestSettingsService.ActivateTestPropertiesForFrame(SecurityS2TestFrames.KEXReport, _KEXReportKEXSet);
            }
            #endregion
            var duration = (int)(DateTime.Now - kexReportStart).TotalMilliseconds;
            if (duration > InclusionS2TimeoutConstants.Joining.PublicKeyReport)
            {
                _KEXReportKEXSet.SetNewExpectTimeout(100);
            }
        }