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); }
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())); }