Пример #1
0
        public void CanParseSpecialAddresses()
        {
            var addr = new NetworkAddress();

            // TORv2
            Assert.True(addr.SetSpecial("6hzph5hv6337r6p2.onion"));
            Assert.True(addr.AddressType == NetworkAddressType.Onion);

            Assert.True(addr.IsAddrV1Compatible);
            Assert.Equal("6hzph5hv6337r6p2.onion", addr.ToAddressString());

            // TORv3
            var torv3_addr = "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion";

            Assert.True(addr.SetSpecial(torv3_addr));
            Assert.True(addr.AddressType == NetworkAddressType.Onion);

            Assert.False(addr.IsAddrV1Compatible);
            Assert.Equal(addr.ToAddressString(), torv3_addr);

            // TORv3, broken, with wrong checksum
            Assert.False(addr.SetSpecial("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscsad.onion"));

            // TORv3, broken, with wrong version
            Assert.False(addr.SetSpecial("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscrye.onion"));

            // TORv3, malicious
            Assert.False(addr.SetSpecial("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd\0wtf.onion"));

            // TOR, bogus length
            Assert.False(addr.SetSpecial("mfrggzak.onion"));

            // TOR, invalid base32
            Assert.False(addr.SetSpecial("mf*g zak.onion"));

            // I2P
            var i2p_addr = "udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna.b32.i2p";

            Assert.True(addr.SetSpecial(i2p_addr));
            Assert.True(addr.AddressType == NetworkAddressType.I2P);
            Assert.False(addr.IsAddrV1Compatible);
            Assert.Equal(addr.ToAddressString(), i2p_addr);

            // I2P, malicious
            Assert.False(addr.SetSpecial("udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna\0wtf.b32.i2p"));

            // I2P, valid but unsupported
            Assert.False(addr.SetSpecial("pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscsad.b32.i2p"));

            // I2P, invalid base32
            Assert.False(addr.SetSpecial("tp*szydbh4dp.b32.i2p"));

            // General validations
            Assert.False(addr.SetSpecial(".onion"));
            Assert.False(addr.SetSpecial(""));
        }