示例#1
0
        public DatabaseStoreMessage(
            I2PLeaseSet leaseset,
            uint replytoken,
            I2PIdentHash replygw,
            I2PTunnelId replytunnelid)
        {
            var ls = leaseset.ToByteArray();

            AllocateBuffer(32 + 5 + (replytoken != 0 ? 4 + 32: 0) + ls.Length);
            var writer = new BufRefLen(Payload);

            writer.Write(leaseset.Destination.IdentHash.Hash);
            writer.Write8((byte)MessageContent.LeaseSet);
            writer.Write32(replytoken);
            if (replytoken != 0)
            {
                writer.Write32(replytunnelid);
                if (replygw == null || replygw.Hash.Length != 32)
                {
                    throw new FormatException("ReplyGateway has to be 32 bytes long!");
                }
                writer.Write(replygw.Hash);
            }

            writer.Write(ls);
            UpdateCachedFields((BufRefLen)Payload);
        }
示例#2
0
        public void TestI2PLeaseSet()
        {
            var destinfo = new I2PDestinationInfo(I2PSigningKey.SigningKeyTypes.EdDSA_SHA512_Ed25519);
            var dest     = destinfo.Destination;

            var leases = Enumerable.Range(1, 8).Select(i => new I2PLease(new I2PIdentHash(true), new I2PTunnelId()));
            var ls     = new I2PLeaseSet(dest, leases, new I2PLeaseInfo(destinfo));

            Assert.IsTrue(ls.VerifySignature(dest.SigningPublicKey));

            var ls2 = new I2PLeaseSet(new BufRefLen(ls.ToByteArray()));

            Assert.IsTrue(ls2.VerifySignature(dest.SigningPublicKey));

            var ls3 = new I2PLeaseSet(ls2.Destination, ls2.Leases, new I2PLeaseInfo(destinfo));

            Assert.IsTrue(ls3.VerifySignature(dest.SigningPublicKey));

            Assert.IsTrue(new BufLen(ls.ToByteArray()) == new BufLen(ls3.ToByteArray()));
        }