public void TestI2PDestinationInfo4() { var destinfo = new I2PDestinationInfo(I2PSigningKey.SigningKeyTypes.EdDSA_SHA512_Ed25519); var asba = destinfo.ToBase64(); var dfromba = new I2PDestinationInfo(asba); Assert.IsTrue(BufUtils.Equal(destinfo.ToByteArray(), dfromba.ToByteArray())); var asstr = destinfo.ToBase64(); var dfromstr = new I2PDestinationInfo(asstr); var d1 = dfromba.Destination; var d2 = dfromstr.Destination; var d3 = dfromstr.Destination; Assert.IsTrue(BufUtils.Equal(d2.ToByteArray(), d2.ToByteArray())); Assert.IsTrue(d3.Padding == d2.Padding); Assert.IsTrue(d3.CertificateBuf == d2.CertificateBuf); Assert.IsTrue(d3.PublicKeyBuf == d2.PublicKeyBuf); Assert.IsTrue(d3.SigningPublicKeyBuf == d2.SigningPublicKeyBuf); Assert.IsTrue(BufUtils.Equal(d3.ToByteArray(), d2.ToByteArray())); Assert.IsTrue(d1.Padding == d2.Padding); Assert.IsTrue(d1.CertificateBuf == d2.CertificateBuf); Assert.IsTrue(d1.PublicKeyBuf == d2.PublicKeyBuf); Assert.IsTrue(d1.SigningPublicKeyBuf == d2.SigningPublicKeyBuf); Assert.IsTrue(BufUtils.Equal(d1.ToByteArray(), d2.ToByteArray())); Assert.IsTrue(d1.IdentHash == d2.IdentHash); }
internal ClientDestination CreateDestination(I2PDestinationInfo dest, bool publish) { var newclient = new ClientDestination(this, dest, publish); Clients.Add(newclient); return(newclient); }
internal ClientDestination(ClientTunnelProvider tp, I2PDestinationInfo dest, bool publishdest) { ClientTunnelMgr = tp; PublishDestination = publishdest; ThisDestination = dest; MyDestination = new I2PDestination(ThisDestination); LeaseSet = new I2PLeaseSet(MyDestination, null, new I2PLeaseInfo(ThisDestination)); IncommingSessions = new ReceivedSessions(ThisDestination.PrivateKey); Destinations = new DestinationSessions((ls, header, inf) => { DebugUtils.LogDebug(string.Format("ClientDestination: Execute: Sending data. TrackingId: {0} ({1}) ack {2}, msg {3}.", inf.TrackingId, inf.KeyType, inf.AckMessageId, header)); var outtunnel = OutboundEstablishedPool.Random(); if (outtunnel == null || ls == null || ls.Leases.Count == 0) { throw new FailedToConnectException("No tunnels available"); } var lease = ls.Leases.Random(); outtunnel.Send( new TunnelMessageTunnel(header, lease.TunnelGw, lease.TunnelId)); }, () => InboundEstablishedPool.Random()); NetDb.Inst.IdentHashLookup.LeaseSetReceived += new IdentResolver.IdentResolverResultLeaseSet(IdentHashLookup_LeaseSetReceived); NetDb.Inst.IdentHashLookup.LookupFailure += new IdentResolver.IdentResolverResultFail(IdentHashLookup_LookupFailure); }
public void TestI2PDestinationInfo3() { var destinfo = new I2PDestinationInfo(I2PSigningKey.SigningKeyTypes.ECDSA_SHA384_P384); var asba = destinfo.ToByteArray(); var dfromba = new I2PDestinationInfo(new BufRefLen(asba)); Assert.IsTrue(BufUtils.Equal(destinfo.ToByteArray(), dfromba.ToByteArray())); var asstr = destinfo.ToBase64(); var dfromstr = new I2PDestinationInfo(asstr); Assert.IsTrue(BufUtils.Equal(destinfo.ToByteArray(), dfromstr.ToByteArray())); }
public static ClientDestination CreateDestination(I2PDestinationInfo destinfo, bool publish, out bool alreadyrunning) { lock ( RunningDestinations ) { if (RunningDestinations.TryGetValue(destinfo.Destination, out var runninginst)) { alreadyrunning = true; return(runninginst); } var newclient = new ClientDestination(destinfo, publish); ClientMgr.AttachClient(newclient); alreadyrunning = false; return(newclient); } }
private void NewIdentity() { ThisDestination = new I2PDestinationInfo(I2PSigningKey.SigningKeyTypes.EdDSA_SHA512_Ed25519); MyDestination = new I2PDestination(ThisDestination); LeaseSet = new I2PLeaseSet(MyDestination, null, new I2PLeaseInfo(ThisDestination)); IncommingSessions = new ReceivedSessions(ThisDestination.PrivateKey); Destinations = new DestinationSessions((dest, header, inf) => { DebugUtils.LogDebug(string.Format("ClientDestination: Execute: Sending data. TrackingId: {0} ({1}) ack {2}, msg {3}.", inf.TrackingId, inf.KeyType, inf.AckMessageId, header)); var outtunnel = OutboundEstablishedPool.Random(); outtunnel.Send( new TunnelMessageTunnel(header, TestRemoteDest.InboundEstablishedPool.Random())); }, () => InboundEstablishedPool.Random()); }
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())); }
static void Main(string[] args) { PeriodicAction LsLookup = new PeriodicAction(TickSpan.Minutes(5)); DebugUtils.LogToConsole = true; DebugUtils.LogToFile("i2p.log"); DebugUtils.LogInformation("Me: " + RouterContext.Inst.MyRouterIdentity.IdentHash.Id32); for (int i = 0; i < args.Length; ++i) { switch (args[i]) { case "--addr": if (args.Length > i) { RouterContext.Inst.DefaultExtAddress = IPAddress.Parse(args[++i]); } break; case "--port": if (args.Length > i) { var port = int.Parse(args[++i]); RouterContext.Inst.DefaultTCPPort = port; RouterContext.Inst.DefaultUDPPort = port; } break; case "--nofw": RouterContext.Inst.IsFirewalled = false; break; default: Console.WriteLine("Usage: I2P.exe --addr 12.34.56.78 --port 8081 --nofw"); break; } } RouterContext.Inst.ApplyNewSettings(); var pnp = new UPnp(); Thread.Sleep(5000); // Give UPnp a chance Router.Start(); while (true) { try { Connected = true; var dest = new I2PDestinationInfo(I2PSigningKey.SigningKeyTypes.EdDSA_SHA512_Ed25519); var mydest = Router.CreateDestination(dest, false); mydest.DataReceived += new ClientDestination.DestinationDataReceived(mydest_DataReceived); var hashes = new I2PIdentHash[] { new I2PIdentHash("udhdrtrcetjm5sxaskjyr5ztseszydbh4dpl3pl4utgqqw2v4jna.b32.i2p"), new I2PIdentHash("7tbay5p4kzemkxvyvbf6v7eau3zemsnnl2aoyqhg5jzpr5eke7tq.b32.i2p"), new I2PIdentHash("ukeu3k5oycga3uneqgtnvselmt4yemvoilkln7jpvafvfx7dnkdq.b32.i2p") }; while (Connected) { Thread.Sleep(20000); /* * if ( LS != null ) * { * mydest.Send( LS, BufUtils.Random( 200 ), false ); * }*/ LsLookup.Do(() => mydest.LookupDestination(hashes.Random(), new ClientDestination.DestinationLookupResult(LookupResult))); } } catch (SocketException ex) { DebugUtils.Log(ex); } catch (IOException ex) { DebugUtils.Log(ex); } catch (Exception ex) { DebugUtils.Log(ex); } } }
static void Main(string[] args) { Logging.ReadAppConfig(); Logging.LogToDebug = false; Logging.LogToConsole = true; RouterContext.RouterSettingsFile = "EchoServerRouter.bin"; //RouterContext.Inst = new RouterContext( //new I2PCertificate( //I2PSigningKey.SigningKeyTypes.EdDSA_SHA512_Ed25519 ) ); for (int i = 0; i < args.Length; ++i) { switch (args[i]) { case "--addr": case "--address": if (args.Length > i + 1) { RouterContext.Inst.DefaultExtAddress = IPAddress.Parse(args[++i]); Console.WriteLine($"addr {RouterContext.Inst.DefaultExtAddress}"); } else { Console.WriteLine("--addr require ip number"); return; } break; case "--port": if (args.Length > i + 1) { var port = int.Parse(args[++i]); RouterContext.Inst.DefaultTCPPort = port; RouterContext.Inst.DefaultUDPPort = port; Console.WriteLine($"port {port}"); } else { Console.WriteLine("--port require port number"); return; } break; case "--nofw": RouterContext.Inst.IsFirewalled = false; Console.WriteLine($"Firewalled {RouterContext.Inst.IsFirewalled}"); break; default: Console.WriteLine(args[i]); Console.WriteLine("Usage: I2P.exe --addr 12.34.56.78 --port 8081 --nofw"); break; } } RouterContext.Inst.ApplyNewSettings(); Router.Start(); var destb32 = AppSettings["Destination"]; MyDestinationInfo = new I2PDestinationInfo(destb32); PublishedDestination = Router.CreateDestination(MyDestinationInfo, true, out _); PublishedDestination.DataReceived += MyDestination_DataReceived; PublishedDestination.Name = "PublishedDestination"; Logging.LogInformation($"MyDestination: {PublishedDestination.Destination.IdentHash}.b32.i2p {MyDestinationInfo.Destination.Certificate}"); while (true) { try { Connected = true; while (Connected) { Thread.Sleep(2000); } } catch (SocketException ex) { Logging.Log(ex); } catch (IOException ex) { Logging.Log(ex); } catch (Exception ex) { Logging.Log(ex); } } }
static void Main(string[] args) { Logging.ReadAppConfig(); Logging.LogToDebug = false; Logging.LogToConsole = true; RouterContext.RouterSettingsFile = "I2PRouter.bin"; for (int i = 0; i < args.Length; ++i) { switch (args[i]) { case "--addr": case "--address": if (args.Length > i + 1) { RouterContext.Inst.DefaultExtAddress = IPAddress.Parse(args[++i]); Console.WriteLine($"addr {RouterContext.Inst.DefaultExtAddress}"); } else { Console.WriteLine("--addr require ip number"); return; } break; case "--port": if (args.Length > i + 1) { var port = int.Parse(args[++i]); RouterContext.Inst.DefaultTCPPort = port; RouterContext.Inst.DefaultUDPPort = port; Console.WriteLine($"port {port}"); } else { Console.WriteLine("--port require port number"); return; } break; case "--nofw": RouterContext.Inst.IsFirewalled = false; Console.WriteLine($"Firewalled {RouterContext.Inst.IsFirewalled}"); break; case "--mkdest": case "--create-destination": var certtype = 0; if (args.Length > i + 1) { certtype = int.Parse(args[++i]); } I2PSigningKey.SigningKeyTypes ct; I2PDestinationInfo d; switch (certtype) { default: case 0: ct = I2PSigningKey.SigningKeyTypes.EdDSA_SHA512_Ed25519; d = new I2PDestinationInfo(ct); break; case 1: ct = I2PSigningKey.SigningKeyTypes.DSA_SHA1; d = new I2PDestinationInfo(ct); break; case 2: ct = I2PSigningKey.SigningKeyTypes.ECDSA_SHA256_P256; d = new I2PDestinationInfo(ct); break; case 3: ct = I2PSigningKey.SigningKeyTypes.ECDSA_SHA384_P384; d = new I2PDestinationInfo(ct); break; } Console.WriteLine($"New destination {ct}: {d.ToBase64()}"); return; default: Console.WriteLine(args[i]); Console.WriteLine("Usage: I2P.exe --addr 12.34.56.78 --port 8081 --nofw --create-destination [0-3]"); break; } } RouterContext.Inst.ApplyNewSettings(); //var pnp = new UPnp(); //Thread.Sleep( 5000 ); // Give UPnp a chance Router.Start(); Logging.LogInformation($"I2P router starting"); while (true) { try { var i2cp = new I2CPHost(); Connected = true; while (Connected) { Thread.Sleep(2000); } } catch (Exception ex) { Logging.Log(ex); } } }
public void TestEGDecrypt() { var mi = "niPls-Doz1DJ3ua4pQDwstMeqnmznBCU~qaxIidv" + "jTW~ohDDpq3BatYwTSM-fIr-eEy4Amdl-tWJTXRO" + "2UzftkuD1-t-Ix9EfED26KrUxnwx2fC74Haykj9L" + "oytqFTFbYj34kMCUDDbhAqv6Ep3EDY8Am7WYqSJL" + "stXXV4tUFZ~mteCm1qfNUbbl6itCUId7zcgkW6SX" + "rwdkno3Ul4H~WVDtmewlxdDbT-rYyOJTnp4Y39Mo" + "8B1ojtMuGCgtbk-LS4gJmlXeCJh~1kHiM-nLIB9W" + "rtq8O4weJ~-R36obERZofGOV3D3kSKSoawXVcq4V" + "BlQOHTn24LkTHYLh3O~0SZlT0KfU5WrqTZtu8jZ~" + "B0q-cvrfqqWcmCFCoKW3WSJ5D0qZi1e9sLMebM96" + "asSRFZvlOUp8xZm84Z-au~m3EmkAaF4QlAzufA~L" + "~1RFaepKpfng0eWfWG73H1daoL3c2e3Pt~5m07FR" + "ZMr6TZoj1IsuI7J-QXRGfvbuMjJqB-tMBQAEAAcA" + "ADJtDgiK2OMz6qSmopA~cLUMW~zQesBqsoYx9AEc" + "sOIkp4g8YgRK2jJhfY46h7aj76ftkV-5uF6xoDUG" + "kbIQGH3rjneTQ2wspOz2WRpQk0MW6Ugd0H~5vYK2" + "ekploxq2gOil0Ad1rz~uobpE2bBKYK9B-EEkRKEP" + "-GTX6DSyosFXxMC1I5cwLDWmXktdNVuzt56AxfcL" + "Nzh9gd1R4l903-aFRiY~VXFHg1NjWBPcjCCz6fpL" + "U0XIdg6hf~DNMnd5D4C27HYujxUi6tj42sikDCPu" + "P6CBGAH~j7vzqkDxW2wker91lwwp~6N8jN4xcvme" + "-EI27LPGnOICvpzxdVrKtpc0Ib4dOe8SFkvxSR4x" + "PDSGWFF-~vAELzyHTYiE07ahNw=="; var myinfo = FreenetBase64.Decode(mi); var ed = "AAAOggAE3uf0930YRPZqauUGNYgj5Ix7aoMz0ZO8" + "OIYpRS9zFi6CHe-SXOCeZMgOSxdkp320s70lnAJ9" + "2Z0fjP9WbBeKuCPjZSyMa-MQ4Bq5Sv~iXK-5T~ui" + "m9WTMnwzWIltbt2Toncx-9aAGsIgoABUpzQ1yjsG" + "-DwSEazn1ZsGAxGXI74SqokXGBggerXCtAhpTOTJ" + "MsFteib29WhURmPxLXPxtoCqav8hEUjEyBy2pnPE" + "h-3fcZPhxfK5FI0h0vZO0ZATZx~0RDV9NyxwaAMy" + "llav8iG2nFmVd7hkvWSVdcaRp2gpZuDcM9aXb2yo" + "xIagerhVF8Dyfbib3YX8GP9tvOhBAGWSRlvNIW6i" + "ImwOHJPuCbD4f2Ombp2VENYfKH~Tc4JP53DOnLs0" + "1pMze3xLaK0LsoPwR2LgYfamxbGDINa8KNB0PXC7" + "l7zcO6vDuC~mlVgs6VkkC-kirW8QMpO9t7v49l3y" + "tqlHBLU~khJwBFYuQEoB78bt~RQANw6R6V12yRIE" + "oW8dGJh5P1eGAFgO24oHyfLdKB-vfm1SZQB5MVyU" + "Ec6Hv4AKDBsxFqzFbThSgURqWk~AL9v-LuMhz034" + "jq-fGZtUY3l~ogz12IxdJIJVsjvJ2jWE-8NyFzC5" + "NhCSYV8jgdbL56ISMNPT9PRuiIyMHJ1w1NfypZ3c" + "aHKEnIjBzpj6R-9~~8PjLvdNO9cVaur5OLOGf4Q3" + "ABbqj9rg5uMJYIrFgddB4uETzb97Iue8BJr8XTRh" + "mwihpOLabG9r1b4-X1Z1HpBZxp8ml3xlZ-Lw6zp3" + "rQj2O84fSr0pxQh04Q-gIPBq7d4fS74uHMhN6rMx" + "bydEq0QQe4cqHDlGO-WZuTmK0tN-vMkwgHRXlz18" + "AdFFTf4caSoYerKPCk07neOWn0Vop1ni3DTRL~Tv" + "k04ZxNLnuuuor8gBh~jVFS-S9EnKkLcWJtJFcVbY" + "y9ZK-4caSvFGz1-Qf0elJKA-cpx7-ivKIQLQEuhx" + "5U6FrnJvchbY4JaZq2QzXVRF8s7X04kYOWWmAPXt" + "C3xE58e9s4-5MJhLNjdsjXoJ0R9jBleMWF-RsVwy" + "QNlTtabQDtDUzVeEQNRAHu9nVc0mJ18NH04KFMbH" + "jTWpgY1wDFB9566C9OOKzK-gkTjzO5RlSwDn5sgN" + "iejCOqM0-4JzMlFQNCuhMvmYAglRG8dLDZ3WjYck" + "NiRqHP2iKMyGQThwIS~TCzc-i5WgNzjLKPnWhhKm" + "1uvsZiWdnVAn9IOsFuOYvuR5NBnRJb~lYWI~zlvT" + "8riNkMIrnCE4CF380NEPfulMM6~98XVtmuMTY-Im" + "Zut2O1kz0OCBvCiYClrFlSlVDVoYEbVmkyoBKjiq" + "dGdPtLC5FnX6eC2bcUNGFOOY32ozF3UUsaRWVMrC" + "Y824xhPxcCt2yiJ~rSXAEBN2qtVW90wYzamz9pw6" + "XiNUdhshjLrOb-qVAnC33Kak89wbPtMGh6uXljR4" + "YxZ3gW2Tl9LIu4~5QP~sS7plo19-bdRfL8uAZ63j" + "gy-fY71std81WBfthqlOTFJMf~c-EU8xj90O408z" + "qYfFty-wgBBfYeeHdyWAWrqbfwLCMlHGGN0M-dbV" + "SjzwgSeLTYbdPrX1Dr6NHxSnJ9br0sXfoFUao1xa" + "4FN556lbolHjV0ns~6IbOVWElDNNecsLxjTWKgdA" + "CrLdh2ZMFL9M56H2Xdz4Adsm5vY1K6kCcLPgbpgb" + "~~gl-Qq4AEc~-nV6fxpu7pmH3HfTXIm0aDtR1KG7" + "kEHv-MreoFvmWvnVCj6tqJr5LAOKCDTvm7cw5fYc" + "27gsskqG~SM~1TyPkF5sb5~xX1EkAYm9PC0pA9WG" + "1~M4640pRCzbVl7jWqf1B~RPc7FRs3wMZqHu6SJW" + "kDRfvupQeNU6TXTkVPwJZcfTElH9ajcu23ucNXP-" + "Glp-00AZZA2fwOzdJe8AlzBIReLRyWKza5hLqmAy" + "paI1e5wSFDgXH027-tXLCYw-l2rsHl2aDO-M0Psj" + "OOA4GhdBUlLZWdy6OAI1~vpssgFY9CUErqR6m7LA" + "mLa9NaBFtTt~ZUYgc0TyrYfXjecl-jxUcPnYEo3u" + "YiBx3kk73LQWI-jj4IqKxUf1Rjp6b~Vhw77NFQPr" + "vqe91ICRuo9XTMavCQP8R1Lg2R7CwljE2qLJ0qxM" + "UN34gUfOIdQzBi~ApnG~aLoRwwro2U2MA63RMKkZ" + "OoXpjAmPj1xGqsQ73bI3lpfpHFLbWm3Ax37t2aud" + "c7-nPoaKoNvNIC0~28jROr35UGCKNMSNmqrifhHB" + "wsIqqMrubLjjmts-ELHWZF~1AZEDKMGrF3j-zGVg" + "LAhaSCvG3CNjaHTiAkPXc5zRwFLi5XTof1QipptG" + "u~j6-0Kpcwb5aWUD4q0JFxJPd0pt5p8N8r8Y04RR" + "TSzzyQsC8iGUDsmQyAnsquvMBpMBoCd3pOsSwYu3" + "d0A7UAoEI0S3Cp4JPndz2waXB4RhJzmHQu3JYv3A" + "IzYNfKvLwkZVdky-e7MqHtrSJU6HErb7JE7CgtW1" + "Gv-WYaCGZZR5qt3x-43CCYN9qnLpSIOXL17yK6P1" + "wsc2lXnAj6IYzppaH6~CtP3WnrsiEzh6lznkQbDx" + "pFygHfhvQQBJbhfjLL6-0RWG52oVsurXnT4og0oW" + "0itSdrP2tFjKc3aFkG4toWyDpfEOS427cPxRRNv6" + "6uEq-giDYHxVuk5k4TQ9bBp4HaWSKS55vr-oz5FF" + "SjT~p3-7WViVeoSO4wbcO7x2djkaQ7rWm6eiggut" + "NKw3WVNTG-oEQWuauwWp7mHwbDmTC7i-j4dvxMfz" + "k4gRWFOZpOEXIuiVBp20Ljy53fqZaSmijYqJwpRi" + "l~g6h-gvc43GMdoC48ryj0ClTN209Ua20YN54lg~" + "izHnl6X-VnmgPr298LKe0COK0xlDLKj~tu2CIzi3" + "mNwe4eLWfsmKRGrcXMwfz7F2SfOfNpqXbpgAV9AZ" + "Qy-SPuqFxNTcmclIzWKudDECoUqADHu3-tLijV0m" + "uer990OtbKeSrW9ICCVpjrbh5aPezOLNXcDkfxGB" + "S~yLpUgLn1aCFQv6Bz1htwfEpeKfqQvwVfD17SoW" + "-8XBA2ORSqXGOL9x93tzmt1pspsfgehXTqEVerH9" + "H9qCAECvRtyHu7jh-DNxFtnA-w5PTg7sf0uKKMOf" + "qtvIrpJulVuPl~JX89aigeihJXAQoc-QD5aMBVYC" + "n55mgrYUEKfe4~yYYYdkJCG0zwD5mADMA-elcNUI" + "ojXYff~X4eJwm1upbS5LpVyH4D-F57JMJKBFOUA4" + "Z6i1qTjQInIDYeinHKRThB9hz3EIB18TvroAz5Yl" + "UdE-BmdrXsXHztucbfw4GQ5LamIGHeYrapJ4QkRm" + "s~a5kdy78FrTV4drRuqoGWlpB9MORKyUVKZbQJND" + "6ncPyrRLaVTXy4m~L2MZoi4mPifkH6JdCUtyHK4f" + "Z0Ch1CSjHBr~kN3FoQRW4fJ9SazZ7sreYJLHOBhf" + "IdJTlu6ZX~nVwDzBZSg-kDj0phD7iWSAy9tI-qjq" + "nLkoZZj7oDt~L1Z-M~pXgsZkfIYN2nfoC3JV~HFl" + "W7DB3HEphkpU2cCzr2-BBFGGftNup6O1rohh1OSD" + "1T9OOACf-VvRk~z1motf5Y9oboEljWgrsqXSgDWM" + "Nsmk7WBv0e8H8SaNiKwoRiT4Y6EVjIe5Ft5pw7r7" + "7s3RhsGA6EcmRT8POELuJz5Q7qK7rYbDw1Ooil9v" + "ebQ7Zo9m~FpTAGAnuIgcPvmFfcgdI9Y46SV1JK4f" + "N91F5dm~7BXZcstbE3cinOV7VEiUEUUPiZaW6dXv" + "7dEwrELbD0gFStVy5IGuy1gqsygVxCvQwXFZ2j0N" + "EpYr0NTIwEOWKol17u3UTBSY6zhhajSPxl1f0QeF" + "yybEcw41IHy1fDZ3RfihzHIislrcDYHQ3mr~kdYC" + "oUlK83CKpQL2NJPKtLXsx0ATPjSYOg9Q25rf9v8c" + "joNrHERzhbDgqeCIXmSF5nLEpys~yRKLYpl7RLPS" + "fptt5gLOVNLmp~Z4CAKjLN-aqMYNopmy92-u74fb" + "u-d7UftyaZHNgT2QNP7TDrwYfivNKRS6detKwTYH" + "fxVpGRDT2HIHXZE3xCfZa6YmfPCrl0kAKAt1NB4i" + "VBb~TJ0p43CuaMnT~Mu7vXkwGVKJtZ3bGQfUtEhJ" + "xh61nVfh3k1F3EuczB~f1ekAZDMa9qhkp-Rv67~S" + "97ASXgyz673QLIoksK2udHB0iHPL6H2pJlBpv4oH" + "4YnA0o4ejTUy5vLgret0ItpMao4waezWK8TMHAzD" + "STd76eOIacKbIYkuorpx2atQrHizDQ9vPSIvurH7" + "8gMHJ03JnYoh60zIvZIqDajTS9vrqIvvu5HaB2re" + "bqmfMx2XKEvjqEBA7hPdqXR6n9typIcj1tqdHK-h" + "9iOYkQ81u64y6SgYMxuXNd38AFTUUouh1OQp2jVv" + "pnLLR-vUT1-G-lO8Xw5wrlwx6G4BA3peKmaMIxBu" + "iJA0qLUc336-oFXvThUh2JwT9RshrKclS7vp-zc9" + "8dzAXxATuxKakXZaJGQ91xWyTkz8lFzuGnfWK5HF" + "CgNiOa2F8nbR5kzofCXyYHyRbp9pT8Ek1xAK0Ayp" + "FYwqfcVFZnhe0TXcup5UDgdFlroirzfJaDIbQKBz" + "O4cS68Kd4YV9HPgu2de84dz~PfIgredg-A-rKon8" + "1ZhGylOgaXCDNNag9mjdF7B5nFjddYytaOgFCTDR" + "G0ntFV8mMDIwxW9GZtt6MSJQSJqjdOM1ywFdPrdX" + "GDKnib~NO247LxGLa05wUZPMvg92~mPgg9SkD9v4" + "-g008LITmMajbpE8~0t-jijMKJkPCQxOaBsH5-fn" + "uToqxg-xm0d9wg48Xr5BmirS5UbC7pS-U9pKI1E8" + "vp~DWbxxRpulZYhgNq2-cR2w7ie01mDleoUv-tdk" + "T9L1erdyTAhHrw2YNe0SD8OmyvW4aPPsjAGMeg=="; var egdata = FreenetBase64.Decode(ed); var di = new I2PDestinationInfo(new BufRefLen(myinfo)); var decr = ElGamalCrypto.Decrypt(new BufLen(egdata, 4, 514), di.PrivateKey, true); }
public static ClientDestination CreateDestination(I2PDestinationInfo dest, bool publish) { return(TunnelProvider.Inst.ClientsMgr.CreateDestination(dest, publish)); }
static void Main(string[] args) { PeriodicAction SendInterval = new PeriodicAction(TickSpan.Seconds(20)); Logging.ReadAppConfig(); Logging.LogToDebug = false; Logging.LogToConsole = true; RouterContext.RouterSettingsFile = "I2PDemo.bin"; MyDestinationInfo = new I2PDestinationInfo(I2PSigningKey.SigningKeyTypes.EdDSA_SHA512_Ed25519); for (int i = 0; i < args.Length; ++i) { switch (args[i]) { case "--addr": case "--address": if (args.Length > i + 1) { RouterContext.Inst.DefaultExtAddress = IPAddress.Parse(args[++i]); Console.WriteLine($"addr {RouterContext.Inst.DefaultExtAddress}"); } else { Console.WriteLine("--addr require ip number"); return; } break; case "--port": if (args.Length > i + 1) { var port = int.Parse(args[++i]); RouterContext.Inst.DefaultTCPPort = port; RouterContext.Inst.DefaultUDPPort = port; Console.WriteLine($"port {port}"); } else { Console.WriteLine("--port require port number"); return; } break; case "--nofw": RouterContext.Inst.IsFirewalled = false; Console.WriteLine($"Firewalled {RouterContext.Inst.IsFirewalled}"); break; case "--mkdest": case "--create-destination": var certtype = 0; if (args.Length > i + 1) { certtype = int.Parse(args[++i]); } I2PSigningKey.SigningKeyTypes ct; I2PDestinationInfo d; switch (certtype) { default: case 0: ct = I2PSigningKey.SigningKeyTypes.EdDSA_SHA512_Ed25519; d = new I2PDestinationInfo(ct); break; case 1: ct = I2PSigningKey.SigningKeyTypes.DSA_SHA1; d = new I2PDestinationInfo(ct); break; case 2: ct = I2PSigningKey.SigningKeyTypes.ECDSA_SHA256_P256; d = new I2PDestinationInfo(ct); break; case 3: ct = I2PSigningKey.SigningKeyTypes.ECDSA_SHA384_P384; d = new I2PDestinationInfo(ct); break; } Console.WriteLine($"New destination {ct}: {d.ToBase64()}"); return; case "--destination": if (args.Length > i + 1) { MyDestinationInfo = new I2PDestinationInfo(args[++i]); Console.WriteLine($"Destination {MyDestinationInfo}"); } else { Console.WriteLine("Base64 encoded Destination required"); return; } break; default: Console.WriteLine(args[i]); Console.WriteLine("Usage: I2P.exe --addr 12.34.56.78 --port 8081 --nofw --create-destination [0-3] --destination b64..."); break; } } RouterContext.Inst.ApplyNewSettings(); var pnp = new UPnp(); Thread.Sleep(5000); // Give UPnp a chance Router.Start(); // Create new identities for this run MyDestination = MyDestinationInfo.Destination; #if MANUAL_SIGN PublishedDestination = Router.CreateDestination( MyDestination, MyDestinationInfo.PrivateKey, true, out _); // Publish our destinaiton PublishedDestination.SignLeasesRequest += MyDestination_SignLeasesRequest; #else PublishedDestination = Router.CreateDestination(MyDestinationInfo, true, out _); // Publish our destinaiton #endif PublishedDestination.DataReceived += MyDestination_DataReceived; PublishedDestination.Name = "PublishedDestination"; MyOriginInfo = new I2PDestinationInfo(I2PSigningKey.SigningKeyTypes.DSA_SHA1); MyOrigin = Router.CreateDestination(MyOriginInfo, false, out _); MyOrigin.ClientStateChanged += MyOrigin_ClientStateChanged; MyOrigin.DataReceived += MyOrigin_DataReceived; MyOrigin.Name = "MyOrigin"; Logging.LogInformation($"MyDestination: {PublishedDestination.Destination.IdentHash} {MyDestinationInfo.Destination.Certificate}"); while (true) { try { Connected = true; MyOrigin.LookupDestination(PublishedDestination.Destination.IdentHash, LookupResult); var sendevents = 0; while (Connected) { Thread.Sleep(2000); if (LookedUpDestination != null && MyOrigin.ClientState == ClientDestination.ClientStates.Established) { SendInterval.Do(() => { if (sendevents++ < 10) { // Send some data to the MyDestination DataSent = new BufLen( BufUtils.RandomBytes( (int)(1 + BufUtils.RandomDouble(25) * 1024))); var ok = MyOrigin.Send(LookedUpDestination, DataSent); Logging.LogInformation($"Program {MyOrigin}: Send[{sendevents}] {ok}, {DataSent:15}"); } if (sendevents > 100) { sendevents = 0; } }); } } } catch (SocketException ex) { Logging.Log(ex); } catch (IOException ex) { Logging.Log(ex); } catch (Exception ex) { Logging.Log(ex); } } }
static void Main(string[] args) { Logging.ReadAppConfig(); Logging.LogToDebug = false; Logging.LogToConsole = true; RouterContext.RouterSettingsFile = "EchoClientRouter.bin"; RouterContext.Inst = new RouterContext( new I2PCertificate( I2PSigningKey.SigningKeyTypes.DSA_SHA1)); for (int i = 0; i < args.Length; ++i) { switch (args[i]) { case "--addr": case "--address": if (args.Length > i + 1) { RouterContext.Inst.DefaultExtAddress = IPAddress.Parse(args[++i]); Console.WriteLine($"addr {RouterContext.Inst.DefaultExtAddress}"); } else { Console.WriteLine("--addr require ip number"); return; } break; case "--port": if (args.Length > i + 1) { var port = int.Parse(args[++i]); RouterContext.Inst.DefaultTCPPort = port; RouterContext.Inst.DefaultUDPPort = port; Console.WriteLine($"port {port}"); } else { Console.WriteLine("--port require port number"); return; } break; case "--nofw": RouterContext.Inst.IsFirewalled = false; Console.WriteLine($"Firewalled {RouterContext.Inst.IsFirewalled}"); break; default: Console.WriteLine(args[i]); Console.WriteLine("Usage: I2P.exe --addr 12.34.56.78 --port 8081 --nofw"); break; } } RouterContext.Inst.ApplyNewSettings(); Router.Start(); var destb32 = AppSettings["RemoteDestination"]; var remotedest = new I2PIdentHash(destb32); MyDestinationInfo = new I2PDestinationInfo(I2PSigningKey.SigningKeyTypes.EdDSA_SHA512_Ed25519); UnpublishedDestination = Router.CreateDestination(MyDestinationInfo, false, out _); UnpublishedDestination.DataReceived += MyDestination_DataReceived; UnpublishedDestination.Name = "UnpublishedDestination"; Logging.LogInformation($"MyDestination: {UnpublishedDestination.Destination.IdentHash} {MyDestinationInfo.Destination.Certificate}"); var interval = new PeriodicAction(TickSpan.Seconds(40)); while (true) { try { Connected = true; while (Connected) { Thread.Sleep(2000); uint recvid = BufUtils.RandomUintNZ(); interval.Do(() => { Logging.LogInformation($"Program {UnpublishedDestination}: Looking for {remotedest}."); UnpublishedDestination.LookupDestination(remotedest, (hash, ls, tag) => { if (ls is null) { Logging.LogInformation($"Program {UnpublishedDestination}: Failed to lookup {hash.Id32Short}."); return; } var test = new I2PIdentHash(ls.Destination); Logging.LogInformation($"Program {UnpublishedDestination}: Found {remotedest}, test: {test.Id32Short}."); var s = new BufRefStream(); var sh = new StreamingPacket( PacketFlags.SYNCHRONIZE | PacketFlags.FROM_INCLUDED | PacketFlags.SIGNATURE_INCLUDED | PacketFlags.MAX_PACKET_SIZE_INCLUDED | PacketFlags.NO_ACK) { From = UnpublishedDestination.Destination, SigningKey = MyDestinationInfo.PrivateSigningKey, ReceiveStreamId = recvid, NACKs = new List <uint>(), Payload = new BufLen(new byte[0]), }; sh.Write(s); var buf = s.ToByteArray(); var zipped = LZUtils.BCGZipCompressNew(new BufLen(buf)); zipped.PokeFlip16(4353, 4); // source port zipped.PokeFlip16(25, 6); // dest port zipped[9] = (byte)PayloadFormat.Streaming; // streaming Logging.LogInformation($"Program {UnpublishedDestination}: Sending {zipped:20}."); UnpublishedDestination.Send(ls.Destination, zipped); }); }); } } catch (SocketException ex) { Logging.Log(ex); } catch (IOException ex) { Logging.Log(ex); } catch (Exception ex) { Logging.Log(ex); } } }