public I2PRouterInfo(BufRef reader, bool verifysig) { var startview = new BufRef(reader); Identity = new I2PRouterIdentity(reader); PublishedDate = new I2PDate(reader); int addrcount = reader.Read8(); var addresses = new List <I2PRouterAddress>(); for (int i = 0; i < addrcount; ++i) { addresses.Add(new I2PRouterAddress(reader)); } Adresses = addresses.ToArray(); reader.Seek(reader.Read8() * 32); // peer_size. Unused. Options = new I2PMapping(reader); var payloadend = new BufRef(reader); Data = new BufLen(startview, 0, reader - startview); Signature = new I2PSignature(reader, Identity.Certificate); if (verifysig) { var versig = VerifySignature(); if (!versig) { throw new InvalidOperationException("I2PRouterInfo signature check failed"); } } }
public I2PRouterInfo( I2PRouterIdentity identity, I2PDate publisheddate, I2PRouterAddress[] adresses, I2PMapping options, I2PSigningPrivateKey privskey) { Identity = identity; PublishedDate = publisheddate; Adresses = adresses; Options = options; var dest = new List <byte>(); Identity.Write(dest); PublishedDate.Write(dest); dest.Add((byte)Adresses.Length); foreach (var addr in Adresses) { addr.Write(dest); } dest.Add(0); // Always zero Options.Write(dest); Data = new BufLen(dest.ToArray()); Signature = new I2PSignature(new BufRefLen(I2PSignature.DoSign(privskey, Data)), privskey.Certificate); }