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); }
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); } }