public void Write(List <byte> dest) { Destination.Write(dest); Info.PublicKey.Write(dest); Info.PublicSigningKey.Write(dest); var cnt = (byte)Leases.Count; if (cnt > 16) { throw new OverflowException("Max 16 leases per I2PLeaseSet"); } var signfields = new List <BufLen>(); signfields.Add(new BufLen(Destination.ToByteArray())); signfields.Add(Info.PublicKey.Key); signfields.Add(Info.PublicSigningKey.Key); signfields.Add((BufLen)cnt); lock ( Leases ) { dest.Add((byte)Leases.Count); foreach (var lease in Leases) { var buf = lease.ToByteArray(); dest.AddRange(buf); signfields.Add(new BufLen(buf)); } } dest.AddRange(I2PSignature.DoSign(Info.PrivateSigningKey, signfields.ToArray())); }
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); }
public void Write(BufRefStream dest) { var dest2 = new BufRefStream(); Destination.Write(dest2); Map.Write(dest2); Date.Write(dest2); var dest2data = dest2.ToArray(); var sig = new I2PSignature(new BufRefLen(I2PSignature.DoSign(PrivateSigningKey, new BufLen(dest2data))), PrivateSigningKey.Certificate); dest.Write(dest2data); sig.Write(dest); }