Beispiel #1
0
        public void TestRemoteRestart()
        {
            Timer t   = new Timer(Timeout, null, 0, 500);
            int   spi = 123333;

            new SecurityPolicy(spi, "Rijndael", "SHA1", true);
            SecurityOverlord so0 = CreateValidSO("valid0");
            SecurityOverlord so1 = CreateValidSO("valid1");

            MockSender ms0 = new MockSender(null, null, so1, 0);
            MockSender ms1 = new MockSender(ms0, null, so0, 0);

            ms0.ReturnPath = ms1;

            SecurityAssociation sa0 = so0.CreateSecurityAssociation(ms0, spi, true);
            SecurityAssociation sa1 = so1.CreateSecurityAssociation(ms1, spi, true);

            Assert.AreEqual(sa0.State, SecurityAssociation.SAState.Active, "sa0 should be active!");
            Assert.AreEqual(sa1.State, SecurityAssociation.SAState.Active, "sa1 should be active!");
            Assert.AreEqual(so0.SACount, 1, "so0 should contain just one!");
            Assert.AreEqual(so1.SACount, 1, "so1 should contain just one!");

            sa0.GarbageCollect();
            sa0.GarbageCollect();
            Assert.AreEqual(so0.SACount, 0, "so0 should contain just zero!");
            sa1.GarbageCollect();
            Assert.AreEqual(so1.SACount, 1, "so1 should contain just one!");
            sa1.Send(MemBlock.Reference(new byte[] { 0, 1, 2, 3 }));
            Assert.AreEqual(so0.SACount, 1, "so0 should contain just one!");
            Assert.AreEqual(so1.SACount, 1, "so1 should contain just one!");

            t.Dispose();
        }
Beispiel #2
0
        public void TestWithPreExchangedKeys()
        {
            Timer t   = new Timer(Timeout, null, 0, 500);
            int   spi = 123333;

            new SecurityPolicy(spi, "Rijndael", "SHA1", true);
            SecurityOverlord so0 = CreateValidSO("valid0");
            SecurityOverlord so1 = CreateValidSO("valid1");

            MockSender ms0 = new MockSender(null, null, so1, 0);
            MockSender ms1 = new MockSender(ms0, null, so0, 0);

            ms0.ReturnPath = ms1;

            SecurityAssociation sa0 = so0.CreateSecurityAssociation(ms0, spi, true);
            SecurityAssociation sa1 = so1.CreateSecurityAssociation(ms1, spi, true);

            Assert.AreEqual(sa0.State, SecurityAssociation.SAState.Active, "sa0 should be active!");
            Assert.AreEqual(sa1.State, SecurityAssociation.SAState.Active, "sa1 should be active!");
            Assert.AreEqual(so0.SACount, 1, "so0 should contain just one!");
            Assert.AreEqual(so1.SACount, 1, "so1 should contain just one!");

            t.Dispose();
        }
Beispiel #3
0
        public void Test()
        {
            Timer            t   = new Timer(Timeout, null, 0, 500);
            SecurityOverlord so0 = CreateValidSO("valid0");
            SecurityOverlord so1 = CreateValidSO("valid1");

            //Test block one
            {
                MockSender ms0 = new MockSender(null, null, so1, 0);
                MockSender ms1 = new MockSender(ms0, null, so0, 0);
                ms0.ReturnPath = ms1;

                SecurityAssociation sa0 = so0.CreateSecurityAssociation(ms0, true);
                SecurityAssociation sa1 = so1.CreateSecurityAssociation(ms1, true);
                Assert.AreEqual(sa0.State, SecurityAssociation.SAState.Active, "sa0 should be active!");
                Assert.AreEqual(sa1.State, SecurityAssociation.SAState.Active, "sa1 should be active!");
                Assert.AreEqual(so0.SACount, 1, "so0 should contain just one!");
                Assert.AreEqual(so1.SACount, 1, "so1 should contain just one!");

                Random rand = new Random();
                byte[] b    = new byte[128];
                rand.NextBytes(b);
                MemBlock mb = MemBlock.Reference(b);
                sa1.Send(mb);

                new SecurityPolicy(12345, "DES", "MD5");
                sa0 = so0.CreateSecurityAssociation(ms0, 12345, true);
                Assert.AreEqual(sa0.State, SecurityAssociation.SAState.Active, "sa0 should be active!");
                Assert.AreEqual(so0.SACount, 2, "so0 should contain just one!");
                Assert.AreEqual(so1.SACount, 2, "so1 should contain just one!");

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sa0.Send(mb);
            }

            // create ~250 valid SAs for one guy...
            for (int i = 2; i < 250; i++)
            {
                SecurityOverlord so  = CreateValidSO("valid" + i);
                MockSender       msa = new MockSender(null, null, so, 0);
                MockSender       msb = new MockSender(msa, null, so0, 0);
                msa.ReturnPath = msb;

                SecurityAssociation sab = so.CreateSecurityAssociation(msb, true);
                Assert.AreEqual(sab.State, SecurityAssociation.SAState.Active, "sab should be active! " + i);
                SecurityAssociation saa = so0.CreateSecurityAssociation(msa, true);
                Assert.AreEqual(saa.State, SecurityAssociation.SAState.Active, "saa should be active! " + i);

                MockDataHandler mdha = new MockDataHandler();
                saa.Subscribe(mdha, null);
                MockDataHandler mdhb = new MockDataHandler();
                sab.Subscribe(mdhb, null);

                Random rand = new Random();
                byte[] b    = new byte[128];
                rand.NextBytes(b);
                MemBlock mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdhb Contains " + i);

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdha Contains " + i);
            }

            for (int i = 250; i < 500; i++)
            {
                int ij = (250 % 3) + 1;
                SecurityOverlord so  = CreateInvalidSO("valid" + i, ij);
                MockSender       msa = new MockSender(null, null, so, 0);
                MockSender       msb = new MockSender(msa, null, so0, 0);
                msa.ReturnPath = msb;

                SecurityAssociation sab = so.CreateSecurityAssociation(msb, true);
                SecurityAssociation saa = so0.CreateSecurityAssociation(msa, true);
                Assert.AreEqual(sab.State, SecurityAssociation.SAState.Waiting, "sab should be waiting! " + i);
                Assert.AreEqual(saa.State, SecurityAssociation.SAState.Waiting, "saa should be waiting! " + i);
            }

            // create ~250 valid SAs for one guy...
            for (int i = 500; i < 750; i++)
            {
                SecurityOverlord so  = CreateValidSO("valid" + i);
                MockSender       msa = new MockSender(null, null, so, 0);
                MockSender       msb = new MockSender(msa, null, so0, 0);
                msa.ReturnPath = msb;

                SecurityAssociation sab = so.CreateSecurityAssociation(msb, true);
                Assert.AreEqual(sab.State, SecurityAssociation.SAState.Active, "sab should be active! " + i);
                SecurityAssociation saa = so0.CreateSecurityAssociation(msa, true);
                Assert.AreEqual(saa.State, SecurityAssociation.SAState.Active, "saa should be active! " + i);

                MockDataHandler mdha = new MockDataHandler();
                saa.Subscribe(mdha, null);
                MockDataHandler mdhb = new MockDataHandler();
                sab.Subscribe(mdhb, null);

                Random rand = new Random();
                byte[] b    = new byte[128];
                rand.NextBytes(b);
                MemBlock mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdhb Contains " + i);

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdha Contains " + i);
            }

            Random randr = new Random();

            byte[] br = new byte[128];
            randr.NextBytes(br);
            MemBlock mbr = MemBlock.Reference(br);

            foreach (Dictionary <ISender, SecurityAssociation> sender_to_sa in so0.SPI.Values)
            {
                foreach (SecurityAssociation sa in sender_to_sa.Values)
                {
                    sa.Send(mbr);
                }
            }

            Thread.Sleep(SecurityAssociation.TIMEOUT * 5);
            so0.SAGarbageCollect();
            Assert.AreEqual(500, so0.SACount, "Count!");

            so0.SAGarbageCollect();
            Assert.AreEqual(0, so0.SACount, "Count!");

            t.Dispose();
        }