private BaseLogic GetResult() { try { Receives formula1 = Formula1 as Receives; if (formula1 != null && //First formula must be of type Receives formula1.Message.Contains("Xi")) //The second parameter must be an encrypted value with key K { // var saidFormula = formula1.Formula as Fresh; // if (saidFormula.Message.Equals(freshFormula.Message, StringComparison.InvariantCultureIgnoreCase) &&//The encrypted message key and the shared key between Agent1 and Agent2 are identical // Equals(formula1.Agent1, formula2.Agent1)) //The first Agents are the same // { return(new Receives() { Agent1 = formula1.Agent1, Message = "Xi" }); // } } } // } catch (Exception e) { Console.WriteLine(e); throw; } return(null); }
public async ReusableTask <int> ReceiveAsync(ByteBuffer buffer, int offset, int count) { if (SlowConnection) { count = Math.Min(88, count); } var result = await ReadStream.ReadAsync(buffer.Data, offset, count, CancellationToken.None); Receives.Add(result); return(ManualBytesReceived ?? result); }
public async ReusableTask <int> ReceiveAsync(SocketMemory buffer) { if (SlowConnection) { buffer = buffer.Slice(0, Math.Min(88, buffer.Length)); } var result = await ReadStream.ReadAsync(buffer.Memory); Receives.Add(result); return(ManualBytesReceived ?? result); }
private static BaseLogic RuleLogic(BaseLogic _formula1, BaseLogic _formula2) { try { Receives formula1 = _formula1 as Receives; Believe formula2 = _formula2 as Believe; if (formula1 != null && //First formula must be of type Receives formula1.Formula.GetType() == typeof(Encryption)) //The second parameter must be an encrypted value with key K { var encryptionFormula = formula1.Formula as Encryption; if (formula2 != null && //Second formula must be of type Believes formula2.Formula.GetType() == typeof(SharedKey)) //The second parameter must be a shared key K { var sharedKey = formula2.Formula as SharedKey; if (encryptionFormula.Key.Equals(sharedKey.Key, StringComparison.InvariantCultureIgnoreCase) && //The encrypted message key and the shared key between Agent1 and Agent2 are identical Equals(formula1.Agent1, formula2.Agent1) /*&&//The first Agents are the same * sharedKey.Agent1.Equals(formula1.Agent1)*/)// the shared key agent is the same with the agent from the first formula. { var logic = new Believe { Agent1 = formula1.Agent1, Formula = new Said() { Agent1 = sharedKey.Agent2 } }; if (encryptionFormula.Formula != null) { ((Said)logic.Formula).Formula = encryptionFormula.Formula; } else { logic.Formula.Message = encryptionFormula.Message; } return(logic); } } } } catch (Exception e) { Console.WriteLine(e); throw; } return(null); }
public void InitializeProtocolSteps() { #region Step 1: B sees {Na}Kab var step1EncryptionRule = new Encryption { Key = "Kab", Message = "Na" }; var step1 = new Receives { Agent1 = AgentList["B"], Formula = step1EncryptionRule }; ProtocolSteps.Add(step1); #endregion // pas2 #region Step 2: A sees {Na,Nb}Kab var step2Concatenate = new Concatenate(); var param1 = new BaseLogic { Message = "Na" }; var param2 = new BaseLogic { Message = "Nb" }; step2Concatenate.Formulas.Add(param1); step2Concatenate.Formulas.Add(param2); var step2Encryption = new Encryption { Key = "Kab", Formula = step2Concatenate }; var step2 = new Receives { Agent1 = AgentList["A"], Formula = step2Encryption }; ProtocolSteps.Add(step2); #endregion // pas3 (KERBEROS) #region Step 3: B sees {Nb} Kab var step3EncryptionRule = new Encryption { Key = "Kab", Message = "Nb" }; var step3 = new Receives { Agent1 = AgentList["B"], Formula = step3EncryptionRule }; ProtocolSteps.Add(step3); #endregion // pas2 #region Step 4: A sees { A<Kab'>B, Nb'}Kab var f22 = new Encryption { Key = "Kab", Formula = new Concatenate() }; var step4C1 = new SharedKey { Agent1 = AgentList["A"], Agent2 = AgentList["B"], Key = "Kab'" }; ((Concatenate)f22.Formula).Formulas.Add(step4C1); var step4C2 = new BaseLogic { Message = "Nb'" }; ((Concatenate)f22.Formula).Formulas.Add(step4C2); var step4 = new Receives { Agent1 = AgentList["A"], Formula = f22 }; ProtocolSteps.Add(step4); #endregion // pas4 }
public void InitializeProtocolSteps() { #region Step 2: A sees {Ts, A<Kab>B,{Ts,A<Kab>B}Kbs}Kas var step1EncryptionRule = new Encryption { Key = "Kas", Formula = new Concatenate() }; var step1BaseLogicTs = new BaseLogic { Message = "TS" }; ((Concatenate)step1EncryptionRule.Formula).Formulas.Add(step1BaseLogicTs); var step1SharedKey = new SharedKey { Agent1 = AgentList["A"], Agent2 = AgentList["B"], Key = "Kab" }; ((Concatenate)step1EncryptionRule.Formula).Formulas.Add(step1SharedKey); var p3 = new Encryption { Key = "Kbs", Formula = new Concatenate() }; ((Concatenate)p3.Formula).Formulas.Add(step1BaseLogicTs); ((Concatenate)p3.Formula).Formulas.Add(step1SharedKey); ((Concatenate)step1EncryptionRule.Formula).Formulas.Add(p3); var step1 = new Receives { Agent1 = AgentList["A"], Formula = step1EncryptionRule }; ProtocolSteps.Add(step1); #endregion // pas2 (KERBEROS) #region Step 3: B sees {{Ts, A<Kab>B}Kbs,{Ta,A<Kab>B}Kab}} var f21 = new Concatenate(); var param1 = new Encryption { Key = "Kbs", Formula = new Concatenate() }; var m1 = new BaseLogic { Message = "TS" }; ((Concatenate)param1.Formula).Formulas.Add(m1); var m2 = new SharedKey { Agent1 = AgentList["A"], Agent2 = AgentList["B"], Key = "Kab" }; ((Concatenate)param1.Formula).Formulas.Add(m2); ((Concatenate)f21).Formulas.Add(param1); var param2 = new Encryption { Key = "Kab", Formula = new Concatenate() }; var msg1 = new BaseLogic { Message = "Ta" }; ((Concatenate)param2.Formula).Formulas.Add(msg1); var msg2 = new SharedKey { Agent1 = AgentList["A"], Agent2 = AgentList["B"], Key = "Kab" }; ((Concatenate)param2.Formula).Formulas.Add(msg2); ((Concatenate)f21).Formulas.Add(param2); var step2 = new Receives { Agent1 = AgentList["B"], Formula = f21 }; ProtocolSteps.Add(step2); #endregion // pas3 (KERBEROS) #region Step 4: A sees {Ta, A<Kab>B}Kab var f22 = new Encryption { Key = "Kab", Formula = new Concatenate() }; var v1 = new BaseLogic { Message = "Ta" }; ((Concatenate)f22.Formula).Formulas.Add(v1); var v2 = new SharedKey { Agent1 = AgentList["A"], Agent2 = AgentList["B"], Key = "Kab" }; ((Concatenate)f22.Formula).Formulas.Add(v2); var step3 = new Receives { Agent1 = AgentList["A"], Formula = f22 }; ProtocolSteps.Add(step3); #endregion // pas4 (KERBEROS) }
public void InitializeProtocolSteps() { #region Step 1: A receives {Na, a<Kab>B, fresh(Kab), {A<Kab>B}Kbs}Kas var step1Sees = new Receives { Agent1 = AgentList["A"] }; var encryptionFormula = new Encryption { Key = "Kas" }; step1Sees.Formula = encryptionFormula; var concatenateFormula = new Concatenate(); encryptionFormula.Formula = concatenateFormula; var baseLogicFormula = new BaseLogic { Message = "Na" }; concatenateFormula.Formulas.Add(baseLogicFormula); var sharedKeyFormula = new SharedKey { Key = "Kab", Agent1 = AgentList["A"], Agent2 = AgentList["B"] }; concatenateFormula.Formulas.Add(sharedKeyFormula); var freshFormula = new Fresh { Message = "Kab" }; concatenateFormula.Formulas.Add(freshFormula); var encryptionFormula2 = new Encryption { Key = "Kbs" }; var sharedKeyFormula2 = new SharedKey() { Key = "Kab", Agent1 = AgentList["A"], Agent2 = AgentList["B"] }; encryptionFormula2.Formula = sharedKeyFormula2; concatenateFormula.Formulas.Add(encryptionFormula2); ProtocolSteps.Add(step1Sees); #endregion // pas1 NSSK #region Step 2: B receives {A<Kab>B}Kbs var step2Sees = new Receives { Agent1 = AgentList["B"], Formula = new Encryption() }; ((Encryption)step2Sees.Formula).Formula = new SharedKey(); ((Encryption)step2Sees.Formula).Key = "Kbs"; ((SharedKey)((Encryption)step2Sees.Formula).Formula).Agent1 = AgentList["A"]; ((SharedKey)((Encryption)step2Sees.Formula).Formula).Agent2 = AgentList["B"]; ((SharedKey)((Encryption)step2Sees.Formula).Formula).Key = "Kab"; ProtocolSteps.Add(step2Sees); #endregion // pas2 NSSK #region Step 3: A receives {Nb,A<Kab>B}Kab var step3Sees = new Receives { Agent1 = AgentList["A"], Formula = new Encryption() }; ((Encryption)step3Sees.Formula).Key = "Kab"; ((Encryption)step3Sees.Formula).Formula = new Concatenate(); var par1 = new BaseLogic { Message = "Nb" }; ((Concatenate)((Encryption)step3Sees.Formula).Formula).Formulas.Add(par1); var par2 = new SharedKey { Key = "Kab", Agent1 = AgentList["A"], Agent2 = AgentList["B"] }; ((Concatenate)((Encryption)step3Sees.Formula).Formula).Formulas.Add(par2); ProtocolSteps.Add(step3Sees); //pas3 NSSK #endregion #region Step 4: B receives {Nb,A<Kab>B}Kab var step4Sees = new Receives() { Agent1 = AgentList["B"], Formula = new Encryption() }; ((Encryption)step4Sees.Formula).Key = "Kab"; ((Encryption)step4Sees.Formula).Formula = new Concatenate(); var param1 = new BaseLogic { Message = "Nb" }; ((Concatenate)((Encryption)step4Sees.Formula).Formula).Formulas.Add(param1); var param2 = new SharedKey { Key = "KB", Agent1 = AgentList["A"], Agent2 = AgentList["B"] }; ((Concatenate)((Encryption)step4Sees.Formula).Formula).Formulas.Add(param2); ProtocolSteps.Add(step4Sees); //pas4 NSSK #endregion }
public void ReceiveMessage(string messageName) { Receives.Add(messageName); }