Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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
        }
Exemple #8
0
 public void ReceiveMessage(string messageName)
 {
     Receives.Add(messageName);
 }