public byte[] TestOverrideMessageEncapsulation(SinglecastKey sckey, SpanTable spanTable, SecurityS2CryptoProvider _securityS2CryptoProvider, SubstituteSettings substituteSettings, byte nodeId, byte[] data, InvariantPeerNodeId peerNodeId, Extensions extensions, byte[] encryptedMsg, byte[] initData) { byte[] ret = initData; if (TestFramesS2.ContainsKey(SecurityS2TestFrames.MessageEncapsulation)) { var testData = data; var testFrame = TestFramesS2[SecurityS2TestFrames.MessageEncapsulation]; if (testFrame.DelaySpecified && testFrame.Delay > 0) { Thread.Sleep(testFrame.Delay); } if (testFrame.Command != null) { testData = testFrame.Command; } if (!testFrame.IsEncryptedSpecified || testFrame.IsEncrypted) { if (testFrame.IsTemp) { if (testFrame.NetworkKey != null) { ActivateNetworkKeyS2CustomForNode(peerNodeId, testFrame.IsTemp, testFrame.NetworkKey); } else { ActivateNetworkKeyS2CustomForNode(peerNodeId, testFrame.IsTemp, GetActualNetworkKeyS2Temp()); } } else { if (testFrame.NetworkKey != null) { ActivateNetworkKeyS2CustomForNode(peerNodeId, testFrame.IsTemp, testFrame.NetworkKey); } } ret = _securityS2CryptoProvider.EncryptSinglecastCommand(sckey, spanTable, Network.NodeId, nodeId, Network.HomeId, testData, extensions, substituteSettings); } else { var msgEncapCryptedData = (COMMAND_CLASS_SECURITY_2.SECURITY_2_MESSAGE_ENCAPSULATION)encryptedMsg; msgEncapCryptedData.ccmCiphertextObject = new List <byte>(testData); ret = msgEncapCryptedData; } } return(ret); }
internal SendDataSecureS2Task(SecurityManagerInfo securityManagerInfo, SecurityS2CryptoProvider securityS2CryptoProvider, SinglecastKey sckey, SpanTable spanTable, MpanTable mpanTable, byte nodeId, byte[] data, TransmitOptions txOptions) : base(false, null, false) { _securityManagerInfo = securityManagerInfo; _securityS2CryptoProvider = securityS2CryptoProvider; _mpanTable = mpanTable; _spanTable = spanTable; _sckey = sckey; SubstituteSettings.SetFlag(SubstituteFlags.DenySecurity); CommandToSecureSend = data; NodeId = nodeId; _peerNodeId = new InvariantPeerNodeId(_securityManagerInfo.Network.NodeId, NodeId); TxOptions = txOptions; _securityTestSettingsService = new SecurityTestSettingsService(_securityManagerInfo, false); }
protected override byte[] GetPersonalizationArray(SinglecastKey sckey, SpanContainer spanContainer) { byte[] senderNonce = null; if (_securityManagerInfo.TestReceiverEntropyS2 != null) { senderNonce = GetRandomData(); spanContainer.SetReceiversNonceState(_securityManagerInfo.TestReceiverEntropyS2); spanContainer.InstantiateWithSenderNonce(senderNonce, sckey.Personalization); if (_securityManagerInfo.NumOfTestReceiverEntropyUsage > 0) { _securityManagerInfo.NumOfTestReceiverEntropyUsage--; if (_securityManagerInfo.NumOfTestReceiverEntropyUsage == 0) { _securityManagerInfo.SetTestReceiverEntropyS2(null); } } } else { senderNonce = base.GetPersonalizationArray(sckey, spanContainer); } return(senderNonce); }