forked from I2P_Developers/i2p.www
volunteer/* -> get-involved/*
This commit is contained in:
36
i2p2www/pages/site/get-involved/bounties/arabic-trans.html
Normal file
36
i2p2www/pages/site/get-involved/bounties/arabic-trans.html
Normal file
@@ -0,0 +1,36 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty Arabic translation of webpage and router console{% endblock %}
|
||||
{% block content %}<p>To improve I2P usage and attract more people
|
||||
into I2P echelon set out this bounty for translation
|
||||
of the I2P web page and I2P router console into Arabic.
|
||||
</p>
|
||||
<p>
|
||||
This bounty is set into 2 subparts:
|
||||
<br>
|
||||
Part 1 is translation of the webpage. <br>
|
||||
</p>
|
||||
<p>
|
||||
For collecting the bounty of 20 BTC you need to translate the following pages:<br>
|
||||
http://www.i2p2.de/index.html<br>
|
||||
http://www.i2p2.de/download.html<br>
|
||||
http://www.i2p2.de/intro.html <br>
|
||||
http://www.i2p2.de/faq.html <br>
|
||||
http://www.i2p2.de/bounties.html <br>
|
||||
http://www.i2p2.de/getinvolved.html <br>
|
||||
http://www.i2p2.de/donate.html <br>
|
||||
This job was done by hamada and the bounty of 20 BTC was paid to hamada.<br>
|
||||
</p>
|
||||
<p>
|
||||
Part 2 is the translation of the router console. The router console was
|
||||
partly translated and the bounty of 80 BTC was paid to hamada.
|
||||
</p>
|
||||
<p>
|
||||
Judge is echelon.
|
||||
</p>
|
||||
<p>
|
||||
Note:
|
||||
|
||||
<p><i>bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for this translation bounty!</i></p>
|
||||
{% endblock %}
|
20
i2p2www/pages/site/get-involved/bounties/btc-client.html
Normal file
20
i2p2www/pages/site/get-involved/bounties/btc-client.html
Normal file
@@ -0,0 +1,20 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty creating a I2P native Bitcoin client {% endblock %}
|
||||
{% block content %}<p>For a future of I2P and attract more people
|
||||
into I2P this bounty is to create a I2P native Bitcoin client.
|
||||
It should integrate with other client via the I2P network and via gateways to
|
||||
the existant bitcoin network.
|
||||
</p>
|
||||
Judge is psychonaut who donated the first 30 € to this bounty.
|
||||
<br>
|
||||
<p>
|
||||
Note:
|
||||
To claim the bounty the author must not be paid by other organizations or teams
|
||||
for this work (e.g. GSoC students are not valid).</p>
|
||||
|
||||
|
||||
<p><i>Note 2: bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for the BTC I2P native client bounty!</i></p>
|
||||
{% endblock %}
|
||||
|
38
i2p2www/pages/site/get-involved/bounties/datastore.html
Normal file
38
i2p2www/pages/site/get-involved/bounties/datastore.html
Normal file
@@ -0,0 +1,38 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty datastorage{% endblock %}
|
||||
{% block content %}<p>To improve I2P's usage and to be independent of routers
|
||||
online status we want a datastorage as a extension to I2P.
|
||||
Like in Freenet the datastorage should be distributed and every
|
||||
participating node should be able to configure his options.
|
||||
The files should be saved in chunks and at least 2-3 times to
|
||||
obtain redundancy. Usage of storage space should be auto balanced.
|
||||
As it is a extra application, it should work flawless within I2P and
|
||||
cooperate nice with the I2P router. Maybe a integration within the
|
||||
webpage/router could be done.</p>
|
||||
<br>
|
||||
<p>This bounty cooperates with the 2 other bounties "frost for I2P" and
|
||||
"eepsites in datastorage".</p>
|
||||
<br>
|
||||
<p>The frost for I2P datastorage bounty is paid for a frost like program
|
||||
with which files/messages are stored into database and got from database.
|
||||
It needs to work with a GUI.</p>
|
||||
<br>
|
||||
<p>The eepsite served out of I2P datastorage extends a I2P router to send
|
||||
out eepsites out of the I2P datastorage. All files for eepsites need to be
|
||||
saved inside of datastorage and are taken from it.
|
||||
Extension:
|
||||
For better integration all datastorage participants could serve that eepsite.
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
Note:
|
||||
For bounties to be declared done and paid, we need the program AND the source.
|
||||
Source and code need to be licensed under a free license (free to change and
|
||||
free to distribute). To claim the bounty the author must not be paid by other
|
||||
organizations or teams for this work (e.g. GSoC students are not valid).</p>
|
||||
|
||||
|
||||
<p><i>Note 2: bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for the datastore bounty!</i></p>
|
||||
{% endblock %}
|
21
i2p2www/pages/site/get-involved/bounties/deb-pack.html
Normal file
21
i2p2www/pages/site/get-involved/bounties/deb-pack.html
Normal file
@@ -0,0 +1,21 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty I2P package in Debian and Ubuntu mirrors{% endblock %}
|
||||
{% block content %}<p>For the future of I2P and in order to attract more people
|
||||
to I2P, this bounty was set for including an I2P package into the Ubuntu and Debian
|
||||
archive mirrors.
|
||||
To claim this bounty, the I2P router package needs to be available from
|
||||
Ubuntu and Debian archive mirrors and Debian bug
|
||||
<a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=448638">448638</a>
|
||||
needs to be closed successfully.
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
Note:
|
||||
To claim the bounty, the author must not be paid by other organizations or teams
|
||||
for this work (e.g. GSoC students are not permitted to claim it).</p>
|
||||
|
||||
|
||||
<p><i>Note 2: Bounty amounts can be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Make a donation</a>,
|
||||
marking the amount for the I2P Ubuntu/Debian package bounty!</i></p>
|
||||
{% endblock %}
|
15
i2p2www/pages/site/get-involved/bounties/i2phex.html
Normal file
15
i2p2www/pages/site/get-involved/bounties/i2phex.html
Normal file
@@ -0,0 +1,15 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty I2PHex code implementation{% endblock %}
|
||||
{% block content %}<p>To improve I2P usage and attract more people
|
||||
into I2PHex P2P ArneBab setout the bounty for implementing actual
|
||||
Phex code onto I2PHex.
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
Note:
|
||||
|
||||
<p><i>bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for the i2phex code implementation bounty!</i></p>
|
||||
|
||||
{% endblock %}
|
152
i2p2www/pages/site/get-involved/bounties/index.html
Normal file
152
i2p2www/pages/site/get-involved/bounties/index.html
Normal file
@@ -0,0 +1,152 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounties{% endblock %}
|
||||
{% block content %}
|
||||
<!-- file version 2012.12.11.01 -->
|
||||
<h1>Bounties for I2P</h1>
|
||||
<p>While we always gratefully accept any contributions of code,
|
||||
documentation, and the like, there are other ways to help I2P move
|
||||
forward. As with any open source project, our goals would be achieved more
|
||||
rapidly if we were able to support all of our contributors to work on
|
||||
I2P full time. However, as with any open source project, that's not a
|
||||
possibility. Instead, we are making use of a bounty system, whereby
|
||||
anyone can get support for working on something that people want
|
||||
implemented, and people who want to contribute to I2P can be assured that
|
||||
their support goes to what they care about.</p>
|
||||
|
||||
<p>We are also keeping open the ability for people who want to support I2P
|
||||
but don't have strong feelings about the bounties available. Those people
|
||||
can simply put their trust in the I2P team to do what we feel is best by
|
||||
donating to a catch-all general fund that will be used as deemed
|
||||
necessary - allocated to various bounties, covering incidentals (hosting,
|
||||
etc), and the like.</p>
|
||||
|
||||
<h2>Current bounties</h2>
|
||||
|
||||
<table border="1">
|
||||
<tr><td><p><b>Name</b></p></td><td><p><b>Status</b></p></td><td><p><b>Judge</b></p></td><td><p><b>Dev <sup>*</sup></b></p></td><td><p><b>Bounty</b></p></td></tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/datastore') }}">Frost for I2P datastorage</a></b></p></td>
|
||||
<td><p>Proposal in development</p></td>
|
||||
<td><p>echelon</p></td>
|
||||
<td><p>[vacant]</p></td>
|
||||
<td><p>€50 EUR</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/datastore') }}">Eepsites served out of I2P datastorage</a></b></p></td>
|
||||
<td><p>Proposal in development</p></td>
|
||||
<td><p>echelon</p></td>
|
||||
<td><p>[vacant]</p></td>
|
||||
<td><p>€50 EUR</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/i2phex') }}">Backporting Phex code onto I2PHex</a></b></p></td>
|
||||
<td><p>Proposal in development</p></td>
|
||||
<td><p>Arne Bab</p></td>
|
||||
<td><p>[vacant]</p></td>
|
||||
<td><p>€100 EUR</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/ipv6') }}">make I2P IPv6 native</a></b></p></td>
|
||||
<td><p>Proposal in development</p></td>
|
||||
<td><p>Amiga4000</p></td>
|
||||
<td><p>[vacant]</p></td>
|
||||
<td><p>€100 EUR</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/debpack') }}">I2P package in Debian and Ubuntu mirrors</a></b></p></td>
|
||||
<td><p>Proposal in development</p></td>
|
||||
<td><p>h2ik</p></td>
|
||||
<td><p>[vacant]</p></td>
|
||||
<td><p>€93 EUR</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/btcclient') }}">Bitcoin client for I2P</a></b></p></td>
|
||||
<td><p>Proposal in development</p></td>
|
||||
<td><p>psychonaut</p></td>
|
||||
<td><p>[vacant]</p></td>
|
||||
<td><p>€30 EUR and 114,24BTC</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/unittests') }}">Unit tests and Multi-router Simulation</a></b></p></td>
|
||||
<td><p>Partly done, partly in work, partly still open</p></td>
|
||||
<td><p>anonymous</p></td>
|
||||
<td><p>str4d,hottuna</p></td>
|
||||
<td><p>3000 €, of which 300 € already paid for done jobs</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/syndie2012') }}">Syndie</a></b></p></td>
|
||||
<td><p>Proposal in development</p></td>
|
||||
<td><p>I2P team</p></td>
|
||||
<td><p>[vacant]</p></td>
|
||||
<td><p>100 BTC</p></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2>Hold bounties, set on hold due to jrandom AWOL and missing funding</h2>
|
||||
|
||||
<table border="1">
|
||||
<tr><td><p><b>Name</b></p></td><td><p><b>Status</b></p></td><td><p><b>Judge</b></p></td><td><p><b>Dev <sup>*</sup></b></p></td><td><p><b>Bounty</b></p></td></tr>
|
||||
<tr>
|
||||
<td><p><b><a href="http://{{ i2pconv('forum.i2p') }}/viewtopic.php?t=1136">Bundling bounties</a></b></p></td>
|
||||
<td><p>Proposed</p></td>
|
||||
<td><p>jrandom</p></td>
|
||||
<td><p>[vacant]</p></td>
|
||||
<td><p>$0 USD each, or $0 for all</p></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2>Claimed bounties</h2>
|
||||
|
||||
<table border="1">
|
||||
<tr><td><p><b>Name</b></p></td><td><p><b>Status</b></p></td><td><p><b>Dev team<sup>*</sup></b></p></td></tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/silc') }}">Setting up a SILC server</a></b></p></td>
|
||||
<td><p>withdrawn and bounty divided between ReturningNovice and the general fund</p></td>
|
||||
<td><p>An Anonymous Secret Society, society@mail.i2p</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/arabic') }}">arabic translation</a></b></p></td>
|
||||
<td><p>both parts were taken by hamada for 100 BTC</p></td>
|
||||
<td><p>hamada</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="{{ site_url('get-involved/bounties/datastore') }}">Datastore over I2P</a></b></p></td>
|
||||
<td><p><a href="http://{{ i2pconv('killyourtv.i2p') }}/tahoe-lafs/install/">CLAIMED</a> for 700 €</p></td>
|
||||
<td><p>duck, smeghead</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <p><b><a href="{{ site_url('get-involved/bounties/rutrans') }}">translation into Russian</a></b></p></td>
|
||||
<td><p>claimed for $230 USD sponsored by russian sponsor</p></td>
|
||||
<td><p>4get</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b>Swarming file transfer</b></p></td>
|
||||
<td><p><a href="http://{{ i2pconv('i2p-bt.postman.i2p') }}">CLAIMED</a> for €250 EUR</p></td>
|
||||
<td><p>duck, ragnarok, dinoman, connelly, drwoo</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b>Streaming library window size</b></p></td>
|
||||
<td><p><a href="http://web.archive.org/web/20070404110818/http://dev.i2p.net/pipermail/i2p/2004-November/000491.html">Claimed (archived link)</a></p></td>
|
||||
<td><p>jrandom</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b>IRC connect time monitor</b></p></td>
|
||||
<td>CLAIMED for $10 USD</td>
|
||||
<td><p>hypercubus</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b>Unit tests (part 1)</b></p></td>
|
||||
<td>CLAIMED for $300 USD</td>
|
||||
<td><p>Comwiz</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><p><b><a href="http://gcc.gnu.org/java/">GCJ</a> support</b></p></td>
|
||||
<td><p><a href="http://{{ i2pconv('trac.i2p2.i2p') }}/browser/Makefile.gcj">Claimed</a></p></td>
|
||||
<td><p>jrandom</p></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<p><i><sup>*</sup> Dev lists anyone who may already be working on the bounty - collaboration is preferred, so if you're interested in working on it, please contact one of the people listed!</i></p>
|
||||
|
||||
{% endblock %}
|
20
i2p2www/pages/site/get-involved/bounties/ipv6.html
Normal file
20
i2p2www/pages/site/get-involved/bounties/ipv6.html
Normal file
@@ -0,0 +1,20 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty I2P IPv6 native{% endblock %}
|
||||
{% block content %}<p>For a future of I2P and attract more people
|
||||
into I2P I withdrawal the vuze bounty and offer a IPv6 bounty.
|
||||
To claim this bounty, the I2P router needs to run full on native
|
||||
IPv6 connections like it does on IPv4.
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
Note:
|
||||
For bounties to be declared done and paid, we need the plugin AND the source.
|
||||
Source and code need to be licensed under a free license (free to change and
|
||||
free to distribute). To claim the bounty the author must not be paid by other
|
||||
organizations or teams for this work (e.g. GSoC students are not valid).</p>
|
||||
|
||||
|
||||
<p><i>Note 2: bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for the native IPv6 I2P bounty!</i></p>
|
||||
{% endblock %}
|
41
i2p2www/pages/site/get-involved/bounties/russian-trans.html
Normal file
41
i2p2www/pages/site/get-involved/bounties/russian-trans.html
Normal file
@@ -0,0 +1,41 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty russian translation of webpage and router console{% endblock %}
|
||||
{% block content %}<p>To improve I2P usage and attract more people
|
||||
into I2P a anonymous donator set out the bounty for translation
|
||||
of the I2P web page and I2P router console into russian language.
|
||||
</p>
|
||||
<p>
|
||||
This bounty is set into 2 subparts:
|
||||
<br>
|
||||
Part 1 is translation of the webpage. <br>
|
||||
</p>
|
||||
<p>
|
||||
For collecting the bounty of $115 USD you need to translate the following pages:<br>
|
||||
http://www.i2p2.de/index.html<br>
|
||||
http://www.i2p2.de/download.html<br>
|
||||
http://www.i2p2.de/intro.html <br>
|
||||
http://www.i2p2.de/faq.html <br>
|
||||
http://www.i2p2.de/bounties.html <br>
|
||||
http://www.i2p2.de/bounty_datastore <br>
|
||||
http://www.i2p2.de/bounty_i2phex <br>
|
||||
http://www.i2p2.de/bounty_vuzeplugin <br>
|
||||
http://www.i2p2.de/getinvolved.html <br>
|
||||
http://www.i2p2.de/donate.html <br>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Part 2 is the translation of the router console. The whole router console needs
|
||||
to be translated to collect the bounty of $115 USD.
|
||||
</p>
|
||||
<p>
|
||||
Judge is the russian donor.
|
||||
</p>
|
||||
<a href="{{ change_lang('ru') }}">russian</a> short version of this page available.<br>
|
||||
<br>
|
||||
<p>
|
||||
Note:
|
||||
|
||||
<p><i>bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for this translation bounty!</i></p>
|
||||
{% endblock %}
|
28
i2p2www/pages/site/get-involved/bounties/silc.html
Normal file
28
i2p2www/pages/site/get-involved/bounties/silc.html
Normal file
@@ -0,0 +1,28 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty migrate I2P IRC to SILC {% endblock %}
|
||||
{% block content %}
|
||||
<!-- file version 2012.01.01.01 -->
|
||||
<p>For a future of I2P and attract more people
|
||||
into I2P this bounty is to setup and host a I2P SILC server.
|
||||
This will allow people to send files over their messaging servers and have intrinsic security built into the protocol.
|
||||
Judge is An Anonymous Secret Society, society@mail.i2p.
|
||||
</p>
|
||||
<p>
|
||||
A silc server needs to be set up and run for at least 3 month time to get payed.
|
||||
A second server should be set up, to.
|
||||
</p>
|
||||
<p>
|
||||
Bounty was withdrawn and money donated to returningnovice and general fund.
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
Note:
|
||||
To claim the bounty the author must not be paid by other organizations or teams
|
||||
for this work (e.g. GSoC students are not valid).</p>
|
||||
|
||||
|
||||
<p><i>Note 2: bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for the I2P silc server bounty!</i></p>
|
||||
{% endblock %}
|
||||
|
25
i2p2www/pages/site/get-involved/bounties/syndie-2012.html
Normal file
25
i2p2www/pages/site/get-involved/bounties/syndie-2012.html
Normal file
@@ -0,0 +1,25 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Syndie development{% endblock %}
|
||||
{% block content %}
|
||||
<!-- file version 2012.12.11.01 -->
|
||||
<p>Beside of I2P we want to encourage users
|
||||
to care more about anonymity and security. As I2P is a low
|
||||
latency network with its natural limits, the software SYNDIE
|
||||
can overcome some of these limits and provide better anonymity
|
||||
for people who really need it. </p>
|
||||
<p>
|
||||
For our bad sake the syndie project is out of development for
|
||||
quite a long time yet (5 years). To get a fresh and new built
|
||||
with needed bugfixes we set out this bounty. Also syndie needs
|
||||
some enhancements and a better GUI for users to work with it.
|
||||
Current bounty sum is 100 Bitcoin.
|
||||
</p>
|
||||
<p>
|
||||
Note:
|
||||
|
||||
<p><i>bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for the syndie development bounty!</i></p>
|
||||
|
||||
{% endblock %}
|
||||
|
99
i2p2www/pages/site/get-involved/bounties/unit-tests.html
Normal file
99
i2p2www/pages/site/get-involved/bounties/unit-tests.html
Normal file
@@ -0,0 +1,99 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty unittests{% endblock %}
|
||||
{% block content %}
|
||||
<!-- file version 2012.04.16.01 -->
|
||||
<p>To improve I2P's maintainability, we want to have a solid set of
|
||||
automated unit tests for the critical code. While we do have some
|
||||
unit tests at the moment, they are ad-hoc and partly unfinished.
|
||||
This bounty is for someone to check the existing tests and move over
|
||||
old ones to jUnit, automate their execution, extend them to provide
|
||||
better code coverage, and publish the report online. Its a massive
|
||||
effort, but can be broken down into phases, listed below (phase 2
|
||||
must occur first, but further phases may happen in any order).
|
||||
As this needs some reading of code, it is the best start point for
|
||||
new devs to get a good overview of I2P code and coding. A good job
|
||||
for college students, interns or anyone who is just interested.
|
||||
</p>
|
||||
|
||||
<h2>Phase 1: <a name="jenkins">CI jenkins and IRC bot</a></h2>
|
||||
<b>Bounty: 500 €</b><i> in work by MathiasDM</i><br />
|
||||
|
||||
<p>
|
||||
To collect this bounty, a continuous integration server (Jenkins,
|
||||
old name was Hudson) must be set up and a connected IRC bot needs
|
||||
to set up in the channel #i2p-dev on IRC2p network to print out
|
||||
results of build tests.<br>
|
||||
The server needs to be run long term.
|
||||
</p>
|
||||
<br>
|
||||
|
||||
<h2>Phase 2: <a name="sdk">Check existing SDK tests </a></h2>
|
||||
<b>Bounty: 150 €</b> paid to str4d <br />
|
||||
|
||||
<p>
|
||||
To collect this bounty, the existing SDK tests must be checked
|
||||
and made to work again. The need to be integrated into the ant
|
||||
build scripts ("ant test"), and tied in with a code coverage tool (e.g.
|
||||
<a href="http://www.cenqua.com/clover/">Clover</a>). The ant script
|
||||
must be capable of generating test status results as a web page,
|
||||
which will be published online.
|
||||
</p>
|
||||
<br>
|
||||
|
||||
<h2>Phase 3: <a name="sdk_coverage">SDK test coverage</a></h2>
|
||||
<b>Bounty: 200 €</b> in work by str4d<br />
|
||||
|
||||
<p>
|
||||
To collect this bounty, the automated unit tests must meet a
|
||||
measured code coverage of 90% of the SDK (i2p/core/java/src).
|
||||
</p>
|
||||
<br>
|
||||
|
||||
<h2>Phase 4: <a name="router">Router test migration</a></h2>
|
||||
<b>Bounty: 150 €</b> paid to str4d<br />
|
||||
|
||||
<p>
|
||||
As with phase 2, the existing unit tests for the router must be
|
||||
moved over to the automated system.
|
||||
</p>
|
||||
<br>
|
||||
|
||||
<h2>Phase 5: <a name="router_coverage">Router test coverage</a></h2>
|
||||
<b>Bounty: 200 €</b> in work by str4d<br />
|
||||
|
||||
<p>
|
||||
To collect this bounty, the automated unit tests must meet a
|
||||
measured code coverage of 90% of the router (i2p/router/java/src).
|
||||
</p>
|
||||
<br>
|
||||
|
||||
<h2>Phase 6: <a name="streaming">Streaming lib tests</a></h2>
|
||||
<b>Bounty: 300 €</b><br />
|
||||
|
||||
<p>
|
||||
To collect this bounty, a new set of unit tests must meet a
|
||||
measured code coverage of 90% of the streaming lib
|
||||
(i2p/apps/ministreaming/ and i2p/apps/streaming/).
|
||||
</p>
|
||||
<br>
|
||||
|
||||
<h2>Phase 7: <a name="multirouter">MultiRouter simulation</a></h2>
|
||||
<b>Bounty: 1500 €</b> will be split in more sub-tasks<br />
|
||||
|
||||
<p>
|
||||
To collect this bounty, the existing in-memory multi-router
|
||||
simulation must be checked, made work again and extend to simulate
|
||||
lots of routers in memory on a single machine. This bounty will
|
||||
be split in more fine grained subworks.
|
||||
</p>
|
||||
<br>
|
||||
|
||||
<p>
|
||||
Judge on all these works is the donor and donor decides if a phase is
|
||||
called succesfull done and money can be paid.
|
||||
</p>
|
||||
|
||||
<p><i>Note: bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for the unit test bounty!</i></p>
|
||||
{% endblock %}
|
26
i2p2www/pages/site/get-involved/bounties/vuze-plugin.html
Normal file
26
i2p2www/pages/site/get-involved/bounties/vuze-plugin.html
Normal file
@@ -0,0 +1,26 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Bounty I2P vuze plugin{% endblock %}
|
||||
{% block content %}<p>To improve I2P usage and attract more people
|
||||
into I2P torrent P2P I setout the bounty for a working I2P vuze
|
||||
plugin.
|
||||
The plugin needs to be official and submitted to vuze for publication
|
||||
on their webpage/repository for plugins.
|
||||
It should be easy to install and configured, work smooth and flawless.
|
||||
Configuration should be friendly to starters and made easy to be anonymous.
|
||||
It should work with *.b32.i2p destinations as with signed (516++ bits)
|
||||
destinations.
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
Note:
|
||||
For bounties to be declared done and paid, we need the plugin AND the source.
|
||||
Source and code need to be licensed under a free license (free to change and
|
||||
free to distribute). To claim the bounty the author must not be paid by other
|
||||
organizations or teams for this work (e.g. GSoC students are not valid).</p>
|
||||
|
||||
|
||||
<p><i>Note 2: bounty amounts may be increased by further donations. Do
|
||||
you think these are important? <a href="donate">Add in your donation</a>,
|
||||
marking the amount for the vuze plugin bounty!</i></p>
|
||||
|
||||
{% endblock %}
|
525
i2p2www/pages/site/get-involved/develop/applications.html
Normal file
525
i2p2www/pages/site/get-involved/develop/applications.html
Normal file
@@ -0,0 +1,525 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Application Development{% endblock %}
|
||||
{% block content %}
|
||||
<h1>Application Development Guide</h1>
|
||||
|
||||
<h2>Contents</h2>
|
||||
<ul>
|
||||
<li><a href="#why">Why write I2P-specific code?</a></li>
|
||||
<li><a href="#concepts">Important concepts</a></li>
|
||||
<li><a href="#options">Development options</a></li>
|
||||
<li><a href="#start"><b>Start developing - a simple guide</b></a></li>
|
||||
</ul>
|
||||
|
||||
<h2 id="why">Why write I2P-specific code?</h2>
|
||||
|
||||
<p>
|
||||
There are multiple ways to use applications in I2P.
|
||||
Using <a href="/i2ptunnel.html">I2PTunnel</a>,
|
||||
you can use regular applications without needing to program explicit I2P support.
|
||||
This is very effective for client-server scenario's,
|
||||
where you need to connect to a single website.
|
||||
You can simply create a tunnel using I2PTunnel to connect to that website, as shown in <a href="#tunnel.serverclient">Figure 1</a>.
|
||||
</p>
|
||||
<p>
|
||||
If your application is distributed, it will require connections to a large amount of peers.
|
||||
Using I2PTunnel, you will need to create a new tunnel for each peer you want to contact,
|
||||
as shown in <a href="#tunnel.peertopeer">Figure 2</a>.
|
||||
This process can of course be automated, but running a lot of I2PTunnel instances creates a large amount of overhead.
|
||||
In addition, with many protocols you will need to force everyone to
|
||||
use the same set of ports for all peers - e.g. if you want to reliably run DCC
|
||||
chat, everyone needs to agree that port 10001 is Alice, port 10002 is Bob, port
|
||||
10003 is Charlie, and so on, since the protocol includes TCP/IP specific information
|
||||
(host and port).
|
||||
</p>
|
||||
<p>
|
||||
General network applications often send a lot of additional data that could be used to identify users.
|
||||
Hostnames, port numbers, time zones, character sets, etc. are often sent without informing the user.
|
||||
As such, designing the network protocol specifically with anonymity in mind
|
||||
can avoid compromising user identities.
|
||||
</p>
|
||||
<p>
|
||||
There are also efficiency considerations to review when determining how to
|
||||
interact on top of I2P. The streaming library and things built on top of it
|
||||
operate with handshakes similar to TCP, while the core I2P protocols (I2NP and I2CP)
|
||||
are strictly message based (like UDP or in some instances raw IP). The important
|
||||
distinction is that with I2P, communication is operating over a long fat network -
|
||||
each end to end message will have nontrivial latencies, but may contain payloads
|
||||
of up to 32KB. An application that needs a simple request and response can get rid
|
||||
of any state and drop the latency incurred by the startup and teardown handshakes
|
||||
by using (best effort) datagrams without having to worry about MTU detection or
|
||||
fragmentation of messages under 32KB.
|
||||
</p>
|
||||
|
||||
<div class="box" id="tunnel.serverclient" style="text-align:center">
|
||||
<img src="{{ url_for('static', filename='images/i2ptunnel_serverclient.png') }}" alt="Creating a server-client connection using I2PTunnel only requires creating a single tunnel." title="Creating a server-client connection using I2PTunnel only requires creating a single tunnel." />
|
||||
<br /><br />
|
||||
Figure 1: Creating a server-client connection using I2PTunnel only requires creating a single tunnel.
|
||||
</div>
|
||||
<br/>
|
||||
|
||||
<div class="box" id="tunnel.peertopeer" style="text-align:center">
|
||||
<img src="{{ url_for('static', filename='images/i2ptunnel_peertopeer.png') }}" alt="Setting up connections for a peer-to-peer applications requires a very large amount of tunnels." title="Setting up connections for a peer-to-peer applications requires a very large amount of tunnels." />
|
||||
<br /><br />
|
||||
Figure 2: Setting up connections for a peer-to-peer applications requires a very large amount of tunnels.
|
||||
</div>
|
||||
<br/>
|
||||
|
||||
In summary, a number of reasons to write I2P-specific code:
|
||||
<ul>
|
||||
<li>
|
||||
Creating a large amount of I2PTunnel instances consumes a non-trivial amount of resources,
|
||||
which is problematic for distributed applications (a new tunnel is required for each peer).
|
||||
</li>
|
||||
<li>
|
||||
General network protocols often send a lot of additional data that can be used to identify users.
|
||||
Programming specifically for I2P allows the creation of a network protocol
|
||||
that does not leak such information, keeping users anonymous and secure.
|
||||
</li>
|
||||
<li>
|
||||
Network protocols designed for use on the regular internet can be inefficient
|
||||
on I2P, which is a network with a much higher latency.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>
|
||||
Applications written in Java and accessible/runnable
|
||||
using an HTML interface via the standard webapps/app.war
|
||||
may be considered for inclusion in the i2p distribution.
|
||||
</p>
|
||||
|
||||
<h2 id="concepts">Important concepts</h2>
|
||||
|
||||
<p>There are a few changes that require adjusting to when using I2P:</p>
|
||||
|
||||
<h3>Destination ~= host+port</h3>
|
||||
|
||||
<p>An application running on I2P sends messages from and receives messages to a
|
||||
unique cryptographically secure end point - a "destination". In TCP or UDP
|
||||
terms, a destination could (largely) be considered the equivalent of a hostname
|
||||
plus port number pair, though there are a few differences. </p>
|
||||
|
||||
<ul>
|
||||
<li>An I2P destination itself is a cryptographic construct - all data sent to one is
|
||||
encrypted as if there were universal deployment of IPsec with the (anonymized)
|
||||
location of the end point signed as if there were universal deployment of DNSSEC. </li>
|
||||
<li>I2P destinations are mobile identifiers - they can be moved from one I2P router
|
||||
to another (or with some special software, it can even operate on multiple routers at
|
||||
once). This is quite different from the TCP or UDP world where a single end point (port)
|
||||
must stay on a single host.</li>
|
||||
<li>
|
||||
<p>
|
||||
I2P destinations are ugly and large - behind the scenes, they contain a 2048bit ElGamal
|
||||
public key for encryption, a 1024bit DSA public key for signing, and a variable size
|
||||
certificate, which may contain proof of work or blinded data.
|
||||
</p>
|
||||
<p>
|
||||
There are existing ways to refer to these large and ugly destinations by short
|
||||
and pretty names (e.g. "irc.duck.i2p"), but at the moment those techniques do not guarantee
|
||||
globally uniqueness (since they're stored locally at each person's machine as "hosts.txt")
|
||||
and the current mechanism is not especially scalable nor secure (updates to one host file are
|
||||
manually managed within Monotone, and as such, anyone with commit rights on the repository can
|
||||
change the destinations). There may be some secure, human readable, scalable, and globally
|
||||
unique, naming system some day, but applications shouldn't depend upon it being in place,
|
||||
since there are those who don't think such a beast is possible.
|
||||
<a href="naming.html">Further information on the naming system</a> is available.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>Anonymity and confidentiality</h3>
|
||||
|
||||
<p>A useful thing to remember is that I2P has transparent end to end encryption
|
||||
and authentication for all data passed over the network - if Bob sends to Alice's destination,
|
||||
only Alice's destination can receive it, and if Bob is using the datagrams or streaming
|
||||
library, Alice knows for certain that Bob's destination is the one who sent the data. </p>
|
||||
|
||||
<p>Of course, another useful thing to remember is that I2P transparently anonymizes the
|
||||
data sent between Alice and Bob, but it does nothing to anonymize the content of what they
|
||||
send. For instance, if Alice sends Bob a form with her full name, government IDs, and
|
||||
credit card numbers, there is nothing I2P can do. As such, protocols and applications should
|
||||
keep in mind what information they are trying to protect and what information they are willing
|
||||
to expose.</p>
|
||||
|
||||
<h3>I2P datagrams can be up to 32KB</h3>
|
||||
|
||||
<p>Applications that use I2P datagrams (either raw or repliable ones) can essentially be thought
|
||||
of in terms of UDP - the datagrams are unordered, best effort, and connectionless - but unlike
|
||||
UDP, applications don't need to worry about MTU detection and can simply fire off 32KB datagrams
|
||||
(31KB when using the repliable kind). For many applications, 32KB of data is sufficient for an
|
||||
entire request or response, allowing them to transparently operate in I2P as a UDP-like
|
||||
application without having to write fragmentation, resends, etc.</p>
|
||||
|
||||
<h2 id="options">Development options</h2>
|
||||
|
||||
<p>There are several means of sending data over I2P, each with their own pros and cons.
|
||||
The streaming lib is the recommended interface, used by the majority of I2P applications.
|
||||
</p>
|
||||
|
||||
<h3>Streaming Lib</h3>
|
||||
<p>
|
||||
The <a href="streaming.html">full streaming library</a> is now the standard
|
||||
interface. It allows programming using TCP-like sockets, as explained in the <a href="#start.streaming">Streaming development guide</a>.
|
||||
</p>
|
||||
|
||||
<h3>BOB</h3>
|
||||
<p>BOB is the <a href="BOB.html">Basic Open Bridge</a>,
|
||||
allowing an application in any language to make streaming connections
|
||||
to and from I2P. At this point in time it lacks UDP support, but UDP support
|
||||
is planned in the near future. BOB also contains several tools, such as
|
||||
destination key generation, and verification that an address conforms to
|
||||
I2P specifications. Up to date info and applications that use BOB can be
|
||||
found at this <a href="http://{{ i2pconv('bob.i2p') }}/">eepsite</a>.</p>
|
||||
|
||||
|
||||
<h3>SAM, SAM V2, SAM V3</h3>
|
||||
|
||||
<p><i>SAM is not recommended. SAM V2 is okay, SAM V3 is beta.</i></p>
|
||||
<p>SAM is the <a href="sam">Simple Anonymous Messaging</a> protocol, allowing an
|
||||
application written in any language to talk to a SAM bridge through a plain TCP socket and have
|
||||
that bridge multiplex all of its I2P traffic, transparently coordinating the encryption/decryption
|
||||
and event based handling. SAM supports three styles of operation:</p>
|
||||
<ul>
|
||||
<li>streams, for when Alice and Bob want to send data to each other reliably and in order</li>
|
||||
<li>repliable datagrams, for when Alice wants to send Bob a message that Bob can reply to</li>
|
||||
<li>raw datagrams, for when Alice wants to squeeze the most bandwidth and performance as possible,
|
||||
and Bob doesn't care whether the data's sender is authenticated or not (e.g. the data transferred
|
||||
is self authenticating)</li>
|
||||
</ul>
|
||||
<p>SAM V3 aims at the same goal as SAM and SAM V2, but does not require
|
||||
multiplexing/demultiplexing. Each I2P stream is handled by its own socket between the application
|
||||
and the SAM bridge. Besides, datagrams can be sent and received by the application through datagram
|
||||
communications with the SAM bridge.
|
||||
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="samv2.html">SAM V2</a> is a new version used by imule
|
||||
that fixes some of the problems in <a href="sam.html">SAM</a>.
|
||||
<br />
|
||||
<a href="samv3.html">SAM V3</a> is used by imule since version 1.4.0.
|
||||
</p>
|
||||
|
||||
<h3>I2PTunnel</h3>
|
||||
<p>The I2PTunnel application allows applications to build specific TCP-like tunnels to peers
|
||||
by creating either I2PTunnel 'client' applications (which listen on a specific port and connect
|
||||
to a specific I2P destination whenever a socket to that port is opened) or I2PTunnel 'server'
|
||||
applications (which listen to a specific I2P destination and whenever it gets a new I2P
|
||||
connection it outproxies to a specific TCP host/port). These streams are 8bit clean and are
|
||||
authenticated and secured through the same streaming library that SAM uses, but there is a
|
||||
nontrivial overhead involved with creating multiple unique I2PTunnel instances, since each have
|
||||
their own unique I2P destination and their own set of tunnels, keys, etc.</p>
|
||||
|
||||
<h3>Ministreaming</h3>
|
||||
<p><i>Not recommended</i></p>
|
||||
<p>
|
||||
It was possible to write I2P applications in Java using the ministreaming library.
|
||||
However, the Streaming library has superceded this, and provides better functionality.
|
||||
</p>
|
||||
|
||||
<h3>Datagrams</h3>
|
||||
<p><i>Not recommended</i></p>
|
||||
The <a href="datagrams">Datagram library</a> allows sending UDP-like packets.
|
||||
It's possible to use:
|
||||
<ul>
|
||||
<li>Repliable datagrams</li>
|
||||
<li>Raw datagrams</li>
|
||||
</ul>
|
||||
|
||||
<h3>I2CP</h3>
|
||||
<p><i>Not recommended</i></p>
|
||||
<p><a href="i2cp">I2CP</a> itself is a language independent protocol, but to implement an I2CP library
|
||||
in something other than Java there is a significant amount of code to be written (encryption routines,
|
||||
object marshalling, asynchronous message handling, etc). While someone could write an I2CP library in
|
||||
C or something else, it would most likely be more useful to use the C SAM library instead.
|
||||
</p>
|
||||
|
||||
<h3>Web Applications</h3>
|
||||
I2P comes with the Jetty webserver, and configuring to use the Apache server instead is straightforward.
|
||||
Any standard web app technology should work.
|
||||
|
||||
<h2 id="start">Start developing - a simple guide</h2>
|
||||
Developing using I2P requires a working I2P installation and a development environment of your own choice.
|
||||
If you are using Java, you can start development with the <a href="#start.streaming">streaming library</a> or datagram library.
|
||||
Using another programming language, SAM or BOB can be used.
|
||||
|
||||
<h3 id="start.streaming">Developing with the streaming library</h3>
|
||||
|
||||
Development using the streaming library requires the following libraries in your classpath:
|
||||
<ul>
|
||||
<li>$I2P/lib/streaming.jar: the streaming library itself.</li>
|
||||
<li>$I2P/lib/mstreaming.jar: the ministreaming library is used as the base for the streaming library.</li>
|
||||
<li>$I2P/lib/i2p.jar: some standard I2P classes (like the Destination class) are very convenient when developing.</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Network communication requires the usage of I2P network sockets.
|
||||
To demonstrate this, we will create an application where a client can send text messages to a server,
|
||||
who will print the messages and send them back to the client. In other words, the server will function as an echo.
|
||||
</p>
|
||||
<p>
|
||||
We will start by initializing the server application. This requires getting an I2PSocketManager
|
||||
and creating an I2PServerSocket.
|
||||
In addition, we will ask the I2PSocketManager for an I2PSession, so we can find out the Destination we use.
|
||||
</p>
|
||||
<div class="box">
|
||||
<pre>
|
||||
package i2p.echoserver;
|
||||
|
||||
import net.i2p.client.I2PSession;
|
||||
import net.i2p.client.streaming.I2PServerSocket;
|
||||
import net.i2p.client.streaming.I2PSocketManager;
|
||||
import net.i2p.client.streaming.I2PSocketManagerFactory;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
//Initialize application
|
||||
I2PSocketManager manager = I2PSocketManagerFactory.createManager();
|
||||
I2PServerSocket serverSocket = manager.getServerSocket();
|
||||
I2PSession session = manager.getSession();
|
||||
System.out.println(session.getMyDestination().toBase64()); //Print the base64 string, the regular string would look like garbage.
|
||||
//The additional main method code comes here...
|
||||
}
|
||||
|
||||
}
|
||||
</pre>
|
||||
<br /><br />
|
||||
<p style="text-align:center">Code example 1: initializing the server application.</p>
|
||||
</div>
|
||||
<p>
|
||||
Once we have an I2PServerSocket, we can create I2PSocket instances to accept connections from clients.
|
||||
In this example, we will create a single I2PSocket instance, that can only handle one client at a time.
|
||||
A real server would have to be able to handle multiple clients.
|
||||
To do this, multiple I2PSocket instances would have to be created, each in separate threads.
|
||||
Once we have created the I2PSocket instance, we read data, print it and send it back to the client.
|
||||
The bold code is the new code we add.
|
||||
</p>
|
||||
<div class="box">
|
||||
<pre>
|
||||
package i2p.echoserver;
|
||||
|
||||
</pre>
|
||||
<pre><b>
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.ConnectException;
|
||||
import java.net.SocketTimeoutException;
|
||||
import net.i2p.I2PException;
|
||||
import net.i2p.client.streaming.I2PSocket;
|
||||
import net.i2p.util.I2PThread;
|
||||
</b></pre>
|
||||
<pre>
|
||||
import net.i2p.client.I2PSession;
|
||||
import net.i2p.client.streaming.I2PServerSocket;
|
||||
import net.i2p.client.streaming.I2PSocketManager;
|
||||
import net.i2p.client.streaming.I2PSocketManagerFactory;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
I2PSocketManager manager = I2PSocketManagerFactory.createManager();
|
||||
I2PServerSocket serverSocket = manager.getServerSocket();
|
||||
I2PSession session = manager.getSession();
|
||||
System.out.println(session.getMyDestination().toBase64()); //Print the base64 string, the regular string would look like garbage.
|
||||
</pre>
|
||||
<pre><b>
|
||||
|
||||
//Create socket to handle clients
|
||||
I2PThread t = new I2PThread(new ClientHandler(serverSocket));
|
||||
t.setName("clienthandler1");
|
||||
t.setDaemon(false);
|
||||
t.start();
|
||||
}
|
||||
|
||||
private static class ClientHandler implements Runnable {
|
||||
|
||||
public ClientHandler(I2PServerSocket socket) {
|
||||
this.socket = socket;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
while(true) {
|
||||
try {
|
||||
I2PSocket sock = this.socket.accept();
|
||||
if(sock != null) {
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream())); //Receive from clients
|
||||
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())); //Send to clients
|
||||
String line = br.readLine();
|
||||
if(line != null) {
|
||||
System.out.println("Received from client: " + line);
|
||||
bw.write(line);
|
||||
bw.flush(); //Flush to make sure everything got sent
|
||||
}
|
||||
sock.close();
|
||||
}
|
||||
} catch (I2PException ex) {
|
||||
System.out.println("General I2P exception!");
|
||||
} catch (ConnectException ex) {
|
||||
System.out.println("Error connecting!");
|
||||
} catch (SocketTimeoutException ex) {
|
||||
System.out.println("Timeout!");
|
||||
} catch (IOException ex) {
|
||||
System.out.println("General read/write-exception!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private I2PServerSocket socket;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
</b></pre>
|
||||
<br /><br />
|
||||
<p style="text-align:center">Code example 2: accepting connections from clients and handling messages.</p>
|
||||
</div>
|
||||
|
||||
|
||||
When you run the above server code, it should print something like this (but without the line endings, it should just be
|
||||
one huge block of characters):
|
||||
<pre id="start.streaming.destination">
|
||||
y17s~L3H9q5xuIyyynyWahAuj6Jeg5VC~Klu9YPquQvD4vlgzmxn4yy~5Z0zVvKJiS2Lk
|
||||
poPIcB3r9EbFYkz1mzzE3RYY~XFyPTaFQY8omDv49nltI2VCQ5cx7gAt~y4LdWqkyk3au
|
||||
6HdfYSLr45zxzWRGZnTXQay9HPuYcHysZHJP1lY28QsPz36DHr6IZ0vwMENQsnQ5rhq20
|
||||
jkB3iheYJeuO7MpL~1xrjgKzteirkCNHvXN8PjxNmxe-pj3QgOiow-R9rEYKyPAyGd2pe
|
||||
qMD-J12CGfB6MlnmH5qPHGdZ13bUuebHiyZ1jqSprWL-SVIPcynAxD2Uu85ynxnx31Fth
|
||||
nxFMk07vvggBrLM2Sw82pxNjKDbtO8reawe3cyksIXBBkuobOZdyOxp3NT~x6aLOxwkEq
|
||||
BOF6kbxV7NPRPnivbNekd1E1GUq08ltDPVMO1pKJuGMsFyZC4Q~osZ8nI59ryouXgn97Q
|
||||
5ZDEO8-Iazx50~yUQTRgLMOTC5hqnAAAA
|
||||
</pre>
|
||||
This is the base64-representation of the server Destination. The client will need this string to reach the server.
|
||||
|
||||
<p>
|
||||
Now, we will create the client application. Again, a number of steps are required for initialization.
|
||||
Again, we will need to start by getting an I2PSocketManager.
|
||||
We won't use an I2PSession and an I2PServerSocket this time.
|
||||
Instead, we will use the server Destination string to start our connection.
|
||||
We will ask the user for the Destination string, and create an I2PSocket using this string.
|
||||
Once we have an I2PSocket, we can start sending and receiving data to and from the server.
|
||||
</p>
|
||||
<div class="box">
|
||||
<pre>
|
||||
package i2p.echoclient;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.ConnectException;
|
||||
import java.net.NoRouteToHostException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import net.i2p.I2PException;
|
||||
import net.i2p.client.streaming.I2PSocket;
|
||||
import net.i2p.client.streaming.I2PSocketManager;
|
||||
import net.i2p.client.streaming.I2PSocketManagerFactory;
|
||||
import net.i2p.data.DataFormatException;
|
||||
import net.i2p.data.Destination;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
I2PSocketManager manager = I2PSocketManagerFactory.createManager();
|
||||
System.out.println("Please enter a Destination:");
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|
||||
String destinationString = null;
|
||||
try {
|
||||
destinationString = br.readLine();
|
||||
} catch (IOException ex) {
|
||||
System.out.println("Failed to get a Destination string.");
|
||||
return;
|
||||
}
|
||||
Destination destination = null;
|
||||
try {
|
||||
destination = new Destination(destinationString);
|
||||
} catch (DataFormatException ex) {
|
||||
System.out.println("Destination string incorrectly formatted.");
|
||||
return;
|
||||
}
|
||||
I2PSocket socket = null;
|
||||
try {
|
||||
socket = manager.connect(destination);
|
||||
} catch (I2PException ex) {
|
||||
System.out.println("General I2P exception occurred!");
|
||||
} catch (ConnectException ex) {
|
||||
System.out.println("Failed to connect!");
|
||||
} catch (NoRouteToHostException ex) {
|
||||
System.out.println("Couldn't find host!");
|
||||
} catch (InterruptedIOException ex) {
|
||||
System.out.println("Sending/receiving was interrupted!");
|
||||
}
|
||||
try {
|
||||
//Write to server
|
||||
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
|
||||
bw.write("Hello I2P!\n");
|
||||
bw.flush(); //Flush to make sure everything got sent
|
||||
//Read from server
|
||||
BufferedReader br2 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||
String s = null;
|
||||
while ((s = br2.readLine()) != null) {
|
||||
System.out.println("Received from server: " + s);
|
||||
}
|
||||
socket.close();
|
||||
} catch (IOException ex) {
|
||||
System.out.println("Error occurred while sending/receiving!");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</pre>
|
||||
<br /><br />
|
||||
<p style="text-align:center">Code example 3: starting the client and connecting it to the server application.</p>
|
||||
</div>
|
||||
<p>
|
||||
Finally, you can run both the server and the client application.
|
||||
First, start the server application. It will print a Destination string (like shown <a href="#start.streaming.destination">above</a>).
|
||||
Next, start the client application. When it requests a Destination string, you can enter the string printed by the server.
|
||||
The client will then send 'Hello I2P!' (along with a newline) to the server, who will print the message and send it back to the client.
|
||||
</p>
|
||||
<p>
|
||||
Congratulations, you have successfully communicated over I2P!
|
||||
</p>
|
||||
|
||||
<h2>Existing Applications in Development</h2>
|
||||
Contact us if you would like to help.
|
||||
<ul>
|
||||
<li>
|
||||
<a href="http://{{ i2pconv('i2pbote.i2p') }}/">I2P-Bote</a> - contact HungryHobo
|
||||
</li><li>
|
||||
<a href="http://syndie.i2p2.de/">Syndie</a>
|
||||
</li><li>
|
||||
<a href="http://{{ i2pconv('www.imule.i2p') }}/">IMule</a>
|
||||
</li><li>
|
||||
<a href="http://{{ i2pconv('forum.i2p') }}/viewforum.php?f=25">I2Phex</a> - contact Complication
|
||||
</li><li>I2PRufus - contact codevoid
|
||||
</li><li>I2P-BT - contact sponge
|
||||
</li><li><a href="http://{{ i2pconv('bob.i2p') }}">BOB</a> - contact sponge
|
||||
</li></ul>
|
||||
|
||||
<h2>Application Ideas</h2>
|
||||
<ul>
|
||||
<li>NNTP server - there have been some in the past, none at the moment
|
||||
</li><li>Jabber server - there have been some in the past, and there is one at the moment, with access to the public internet
|
||||
</li><li>PGP Key server and/or proxy
|
||||
</li><li>Download manager / eepget scheduler -
|
||||
We use eepget to fetch lots of things reliably over i2p, and there's already an
|
||||
implementation of a sequential download manager (net.i2p.util.EepGetScheduler),
|
||||
but there isn't any sort of user interface to it. A web based UI would be
|
||||
great.
|
||||
</li><li>Content Distribution / DHT applications - help out with <a href="http://{{ i2pconv('feedspace.i2p') }}/">feedspace</a>,
|
||||
port dijjer, look for alternatives
|
||||
</li><li>Help out with <a href="http://syndie.i2p2.de/">Syndie</a> development
|
||||
</li><li>Web-based applications - The sky is the limit for hosting web-server-based
|
||||
applications such as blogs, pastebins, storage, tracking, feeds, etc.
|
||||
Any web or CGI technology such as Perl, PHP, Python, or Ruby will work.
|
||||
</li><li>Resurrect some old apps - in the i2p source package -
|
||||
bogobot, pants, proxyscript, q, stasher, socks proxy, i2ping
|
||||
</li></ul>
|
||||
|
||||
{% endblock %}
|
371
i2p2www/pages/site/get-involved/develop/developers-keys.html
Normal file
371
i2p2www/pages/site/get-involved/develop/developers-keys.html
Normal file
@@ -0,0 +1,371 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}I2P Developer's MTN Keys{% endblock %}
|
||||
{% block content %}
|
||||
<h1>MTN Keys</h1>
|
||||
<p>Monotone servers used by the I2P project require two types of keys to be used.
|
||||
<ul>
|
||||
<li><a href="#commit">Commit Keys</a> to sign changes checked-in to the respository; and</li>
|
||||
<li><a href="#transport">Transport Keys</a> to push changes to remote servers.</li>
|
||||
</ul>
|
||||
|
||||
<p>Everyone that uses Monotone to checkout the I2P codebase will need to <a href="monotone#obtaining-and-deploying-developers-keys">import</a> the
|
||||
developer commit keys, but only Monotone <a href="monotone#operating-a-monotone-server">server operators</a> will need to import the <a href="#transport">transport keys</a>.</p>
|
||||
|
||||
<h3 id="commit">Developer Commit keys</h3>
|
||||
<pre>
|
||||
[pubkey jrandom@i2p.net]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOLw05kZbux5KLdp
|
||||
rcGHeCTlyt+GjhGXh7Aups+QMD/FEbIVEFPGIBG2ju3069TKIHpXr5
|
||||
HEe5maBgtIJBM9NPVvMNFCgOSregmnVIpxSgHd+Wiu1Iyzhd0SxC5p
|
||||
CHdnwSjv051fctYcp1rs5OcUojUdvF7tq91zAAY+kLxpX6zQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey complication@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCx1F6nwBUCIiCPVs
|
||||
ogy/h/+2d8X3uMcEdnRIN+gxO+0pK+yrGZiFwi7TG/K3PjDfJWuxsP
|
||||
RKLeb9Q4NmfxrAePelGig9llalrDnRkIcRFucnNUOJo9C0MjvzYR9D
|
||||
6bIS3+udPdl6ou94JX+ueo2jLXI1lGgtdWDWTetJx9I++EvwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey zzz@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtgaWY0Wc1c8pFGI
|
||||
xASZx78pHpHZKQV8z6IRQkgy65gQMjpLquaQpy3Xk8rkpnfA+6h3TS
|
||||
6bjplsEhlaQoxvpGxacRYOt+y1HC/n20O3RIE1A/e3sGKHGDEQW+3I
|
||||
tF4WSNfeQ18DzLeun32vFknq2k9im6Ts4tiYfKs8CZ5KW0/QIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey dev@welterde.de]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRnJUBY0d4310UpZ
|
||||
YGUlsWgxWHoD8bsKtTvGw83vwUQRtM2xPKxCHvEntg9Dgiqr5RurOK
|
||||
HK7Eak6WgxCXQFfC9ALr4SoC5abI4ZFvM/CAWRb547UIPTchSnuDUn
|
||||
/TSgDGqtGvMFS9t6OUp9Z/7QzIjLQhhBCqj4/hZhxUJ61XBwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey Oldaris@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/wN6IERnEJzL6X7
|
||||
UXpGwkf8DII5pFiGmpLyAphMK3zVUwJCFqEJWdOBpUa8hq6wmXCGVP
|
||||
aDZZ1K+M/6XNxNSR2JX/4+18EjOt8OWnMy1agpZo6dlRbBQyFUjlwz
|
||||
GbulGSo/pP/bY8S4KeTi6bzkkiUvvIKWKX8/53tZesgUg3KwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey sponge@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDmKJfJ2KFI8BLYa0
|
||||
38oc2LNRCr44ardR6VIeEVY/RTKj62KbFKttU5nmTwBDEnKTkzjq+c
|
||||
M8jNKGDB2HbGF9em+FQFvf1tLYgtfV8ArkODdKrjhBpAoizbb0Gc5W
|
||||
5NDrV87X8mB352RBiJ/6Chy4pe3Bi5qRA3sBge2sVaD2uEPQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey dream@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTuU8WYdNydjKucb
|
||||
0E4Y+JD60AgHDU/9L0Tga1YA/JT1T2BDWLdYIh5uzf6XgzxFvFEx1F
|
||||
c2ZYRu+XwjMlM9NDHgkTUQwMT6NeGOUhB0e+ypxVxIp3iyNbAAGQsq
|
||||
iJR7/EDKN1AhfFMCXQSnl3OLSU9J2gfgqOIeeSabPOiVXpcwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey mathiasdm@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCo5hy9RZ9yQJ7jze
|
||||
u9IBTZ8kQA+APiUpsTBTHXYT1CGkeDddoll5sD97Vk4yWxLMu5BE/C
|
||||
rJKnZqrueblpgQ1xBsA04wzQlXKRJIv3W/woElRX23SFImlRo4/1Yl
|
||||
+ckUet7YnG0ryielCxvg3aQE5mbVi/igFx11vkhnJ8ajDgZwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey mkvore-commit@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5Q8Wz2Ag0RTpus1
|
||||
QKYHZwf1/MxxTV+jANXBUyKUFnIA+jgw7ltUEZ+nw9NTfEUrNGcgJn
|
||||
PtBwDqTtbbYYiRG2D2YXlIqTpdZl5tC+lbPeHV1tRjyGpvdlbPBepp
|
||||
xAdrROmt0MnXG8JZiDGLrsD4+CPnzClFdhwK/MMIv75iMpiwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey z3d@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYGyxsmalo1CNHnS
|
||||
Tx0e3TyAWcGw9zFuGj/scRg72/b3JRsY5rxedp5S+8EE2GrkUNGFBz
|
||||
K+OHhxuGqJVVBe+IqRNHKVHhibTG+PlMZ9llqxevhXAbXD3ZLES3//
|
||||
5u5UCZp0UDJNGp6WvykHSLg4YeF3SN0aBedHM46rGu/rCycQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey cervantes@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCryEmQRgq/fp1v17
|
||||
thtVmr6PQq7MS7TDNaklZTGbcDwh/29eCwajiWjPfjAAG6uXgi5rz7
|
||||
8U4M6GXHGZbwZ3uECXDn3XO+0lqMair/hs9Z2iPT3bk4kO7MvELKk8
|
||||
Cje3FvhpFxGrPkiipsFrm3vxK9wu1nsgIt4RefmvzE4GGO5wIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey BlubMail@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxrz9mlNzwyQ8Jgq
|
||||
dhUZWZ0ZNOAcPS0aAsewR93jj4Sizq0L623cE5FNavoGa0FyC5Pei5
|
||||
rXOutgZ/q6tfj3ty8WVv67+zacPCLKnLiMHM5ZqnzdlTiUrvq95rE4
|
||||
z35zaeNaXL2HWK0AjJccG2+VMjaGpYWsqOBC4JXBlC+b37sQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey walking@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6p3gEkln5OtrXhn
|
||||
NgqNrUMMWm9qgIeYPceoasOWVbDYdaLVRcr6Zm/C89fYyCgC94Fyhe
|
||||
TTkmFx2p5AkUBR9uQP73YYVG6yBQZzcE3QLWqarxvISIkLIG9Y+a+Y
|
||||
jO8KPv9nZLOI0cPR9PzIO6KdhNQHOYF6cdGY/KQTW/qPVPcwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey neutron@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWkZsO+JevhpRyUJ
|
||||
mFc//7LDkXwUOyaN5Iy58Q6LlxL77OSe9xv6T6re/+GwTK29GobBlx
|
||||
nE891iMZrrz36RbVnmQhLELv2H+268nx4sgL8P+OLvTtQRiffabPlO
|
||||
0zYmVh0rF+JnCuopBzPuioJq7AzqQB1LY/qwY4HnVGnc5ecQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey HungryHobo@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClWkCeQRmzUOX4dI
|
||||
6Ug7gCFR9iIhKZZCNFsfu+xfPSWzLUuu/+UVxq/wFqQiI4iIsx6NzO
|
||||
Ag6QgyvUiIFrutasa8diNITnqxfJkA918W/v4iLLuB1ppy0Jaog0OK
|
||||
ttDrf7S/puZUNfi8PKDPEGdbGDZ2rLN3gRslnaKqSHlSO7xQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey russiansponsor@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDENEaXsL9AnH0lLt
|
||||
JzMVfz4u6sck+TLXJjijZr61BJAvIQhaGwnGBkzA9Cn/yUaFUF7L+/
|
||||
eFBHRkaYFQ6ITfOXioKq07UAJyKO7X+mTIaBUNy/if7DY+cRmCUBhJ
|
||||
XU7EitmCJdu9Pqteo74Icpw7dhYUuhg9R2oD5BIxJGGdzfrwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey echelon@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/oVMwyzMaSsH2WF
|
||||
gl209ZZn1TMGYo6SDBn3aI7Ohw5iIujBWX6D+p74iTkrlL1JOjmI2+
|
||||
nvStbCFbKcm4VxFQFrJ3DydrRGCmmRNhm8tKewei36sdhXzbAzxDTq
|
||||
BZOpmNL/TYQtpRgozKHmmix8yDgncva0TWSOjUmHRArXfAiQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey forget@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfQR7tQMh4xGCq0R
|
||||
9BXQ0HnYbEZYnf+aprSuEfy3ji3x7VFwJ/TkfGDhNgrHh2/uBQ+P7y
|
||||
1OFygEPalOkIc2FwJ51yWMac/YnQWPNTo3mtr6V7NfnC7UnForkJyI
|
||||
iLNhi0kVfm9719W391byclB/9t7O6ZYynO1qXRuco5e8jI7QIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey privateer@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrUQmgzVrk0cO85H
|
||||
CefU5ZHAOZeauLL4gXjRcEpYqtLA1XxDmqYDupfLc/SWxmN4ElIb8h
|
||||
GN048REUGk6umzbGQvUK6z62mHigF2JeqMbgwxzzIPk7K26gncmadT
|
||||
6+0B3TBsUW7A6KeoCKdID2IL6CqB3qGyFLkRtY10G23zHOCQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey duck@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwmWqF56heG7WQb2
|
||||
mrGqv6GuMDXhS/Lu2DZDAIvZGHYNyWBO4x3Lis48A0jHZDSqYzIqyE
|
||||
J+BFwg4AjvOiPziEbD8SJ6/pCAfIZpk6E8lExZn6VhypIDIJMmH/bq
|
||||
BK31bC++XaWp34v9xc9tZRKJiYmhRb6EVA/IapG8A/t+TQVwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey m1xxy@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/aaFUq37RQdJpMC
|
||||
8aacqYLdd88wNVjwI+4HY5d7a61HvYIAecg1KJlq/CDFFrygmCcusn
|
||||
FaBmmBQFLO+gJXPKi9PMo1vaENiqCTVfY4EUpMMYzpuqKMKjyfuT6e
|
||||
oOHCZEKfZosUowyJt61FsTzGu+B9y27d0jxXwXT/fml100EwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey hiddenz@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnpEeIignM2UUsJT
|
||||
9+hSMcVOUuf0PZTxi9G3zRhDjal8Qdy/NUZQELAc6/gBhnZcSP4BHp
|
||||
/0BTTxXthlTjko8nkwx+EgzQO425Vgb1v/7RneCqEDjMP6QyZUOn1H
|
||||
i2UBw+jvnbjFk1wDqt9BPdAKITfp3l7bR1xGr4gs1M4MSrcwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey dev@robertfoss.se]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDW/j5vyMJLTI2YoZ
|
||||
emcSETQI6FW2kq2CQuA6UU2vjhIlqIITBHCjgTpjIocpKxodHrR20j
|
||||
1aGWh3SoGdFa79NLLZvVH8h1cjYmBhDWTvrlefH94v74+TnL+Z9oUN
|
||||
oJ4nWsFD66vB76i9e/MsI1CcarQmRrf4HjLYGm+ME4oJMyNQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey hamada@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmBYkINIl+HDcdPz
|
||||
bID2zmd309oe6XX2EmVdngTn6mgXVh5G47Wx2y6V8XMYFMsTQOUBba
|
||||
PAIzAKOlQ7O1lOb8HDXYf42iO4IG0QH0XV8eZUugYumtomtAu8qCUy
|
||||
3/ux1+xmFJQ0CbU9178EDqZsz/EaH1xfkkh4XJ3TXtvcEBZQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey magma@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCkwYsTheWK9/gwS0
|
||||
Aoz0PQZD/I428ZAFmdZfZNNSyVgV9EHopHgATIJr6gi+UYhem1hwiQ
|
||||
2J8G7/ZCptwT8syFRKuj/CIyeUPEALCNGrWaWrVVBoBS5VNHkS0Nq0
|
||||
1pT7I2K+y52vvMMyE1O/4BTkA35mvTL0wA80zRuZ199eOUsQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey kytv@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMMTHQs4AQ0KuXjH
|
||||
sPRvfeBo2EydIAcGcBH7VCO26AofX2ns3ezTKfvmv6QcFhcxn41I6O
|
||||
dG29DdFVRz4D8hIZvOoFYfe87nswgyXW85rEilJP02Z8HCr/dcYJbP
|
||||
sWAlMr7/UIDsT/9swd0U6QTf9X2W+VORyhDdYXcG8zikBqXQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey str4d@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe4zkWVW8fBXGtnM
|
||||
pWbw316qbxWhKdnM86bnPyU3a8C2ERaofESzoZPXm21BR4jEqHLFzV
|
||||
zni4MTAJ+J0XjW70Le5DZTm/AG18qXd8UsK2+IreCHqnv5XPL8Lw8o
|
||||
Y6zNoT834emGqH2n0T98OHF6zNUStBrvuv9AFPa6FZocF2mwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey meeh@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCXk4uuZsnO+JhSd
|
||||
8MVUxJh9aSHde0dPxHOgWgcfdrcH1crn5SPhTFQVe2ZY7HuwbQPDb3
|
||||
ZAQSLNx4odZpC0U6s6wejJgWwGl3h232aMU/LO3qAXtjOzpt1HNg7x
|
||||
Wcw2E10Ag1K6qLpxs3TJy3BEJvPIghUMeWbfE5XbaUgkbuFQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey ReturningNovice@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCucT9GhzRqr2l1Uh
|
||||
ifcwYRHjSZWAf1XXtu6EEsA5p9DTg2tOiN+SCuRe3QpMVU2er4YQOU
|
||||
CFhd0htyCw/l2/syEPeObx78Yf2pCnAIYAsapCa0kNQzlb4FB637Ql
|
||||
AmEGcRv0PjbW6USV41EWMad0RFWmq8SBkuZxbwpn33bUNkXQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey zab@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0H8bP/f8v7KjnyG
|
||||
lZGWQsF5G3ppvJ1Kwt/dUGi7gHbclKPnFAWXmb7YWOhl9Ua2USjQ4Y
|
||||
rIeB7/2uVOpe+3FrFgUzIiWsx6I2yiNI3TscDvQsa5wG0Z2G4BbHXj
|
||||
ONyiUzzO+j2TWPs3x35r2LCy8plRzPAswCF1GaIEjJCce5zwIDAQAB
|
||||
[end]
|
||||
</pre>
|
||||
<h3 id="transport">Developer Transport Keys</h3>
|
||||
<p><b>Note:</b> Transport keys are only needed for setting up a <a href="monotone#operating-a-monotone-server">Monotone server</a>.</p>
|
||||
|
||||
<pre>
|
||||
[pubkey zzz-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDa2uZI1BobxS4Tap
|
||||
Mqmf4Ws3nyL3GYgkfbMEawyWl0E1pfHJ4dLZkdxQdcLyCsN9OCY4jR
|
||||
NzmoYnDa2HtBLINq15BJmGJ0cfIDLXIB2GBOViAPRkEKQTVoc7Ipcj
|
||||
tPPjtSBVganD/AW78m9cgUYag86Lbm2ynUaXWpw9i4gpLdLQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey transport@welterde.de]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCujyq15a7t0Gki/s
|
||||
KoZQbv7CHJWbT3YB5ODQyU3zfqXnHNj82tz6wVsvjZmKUYZvax7wLL
|
||||
RErMGX3PTGxb23I5iypLmYtWt+lbkxMZdcGTGEXBU8JnAfhnSIdLzB
|
||||
J2soe55vBQp0Tx1Ta+7/CNYwVPUxr5l6J/2gcGFJg3cAD99wIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey complication-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDP55FmBUIZjamtDi
|
||||
nVDrLmS9uU40KoNfLdiB+t/iEgEWHDPQxlwugh/aBQwsXKGGJMJSNU
|
||||
RKwwjfrcr5y3oz9jpRjtLVqoZMBVLgp28WGA9KbzXi4/dYhdyNmr4g
|
||||
Hc17mDSlhCfk/L5QxifSYwSaeeFPsoAAyBBB221Z3197bmVQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey dream-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXpVjyvfxmLhjWZN
|
||||
HHroRMlvnNjz0jI0JfhsZIDk3KqS6H/2yfxJDm6t3/ODyl6AXYzVrP
|
||||
0oi90uE2nqNfSJVB3Csm6Jl4z64GXhovAXHCY/g0XS0obUV6bUFRph
|
||||
4iXy5IrjV2JnVTGJYW9PDjHOyXz8idpnauJ2t56QpHZSQpZQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey kytv-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD4secxbkqqBtmAYx
|
||||
IChXrgmaq+aueIJ9hVZVdYqEj+QwpMwNrVmsfZkq4J3F7KYwsDwFq+
|
||||
lBMt8rweXddnUhA2jhGbZ6frFGXB9SXhU9QazvojksLJ8wOTKj++fR
|
||||
fBBzpGgAlq3VvCPgwM0/j6DD+Lj2T88zmW0zZfQJPmr/Hz2QIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey f-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6KwEmazpoBtcEBQ
|
||||
Ei1Cu1T4VimDXHUD+shpiLOirVCZFBX+gXy4KYFcLuaFzBvYXMk6zF
|
||||
HYBKt6sbIvxrl9g1yy6W367uvayeuwd8+gT2D5tYfjc0KdFM5UmILO
|
||||
g4fScp0eurAPBowg66xG4kIylISkRmNGWHlecs9sH2cVf8OQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey ampernand@gmail.com]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJfmtEanQ07lbTVu
|
||||
29xXX8R+FWWo7YzKUpRmcdnyjYaQgRbyCR+Y83z9nK+J5ZQXEwr12U
|
||||
2zfJpzohWlEyvpJuFvzv6aiiZRvLXXwZj6LL5TYUva48MUSg1GqytT
|
||||
6l8mu4ypF/uc3OAcY/quBmlqD1JAwKhBvwCvNpWHMTj20y3wIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey meeh-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNm8aGdaHM5S4CbH
|
||||
GerEYH8Ch4sp10YuEweUr0G8eAIP8NqC90OvNwp1QkoFQ4kQsQVJbF
|
||||
LQdwfLze2N7KstigSl87YV7RWqn9GX+VYIQ/HCFnmyGPkJSmvs3OA/
|
||||
JQE8u+wqSYuLphzJF//+YAMYWW0hlMhU9hB0Sr2MRjA6yVIwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey sponge-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQttmzW0G38zUNz7
|
||||
J6cdqDC3d+dzw7Xjwup3DXWLMVUkrsl1ASMx8pP58LI29zyBVmXfYe
|
||||
pHpwKivCkR4p3XSMYy5zi/cxVlsG/kRH1irvMm5opDdqqi2lvgpn0i
|
||||
KHx3/DPaXvroi+KeF7m4L9Y8h1BYEehLxVZr9IVdyxFRaA5wIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey anarkia-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFJ7GNuwu2xxghKJ
|
||||
BHmog1UbA2tzM5gjbWYZRGdpADbaejCBJRFcWRh/OXSxk17lH96bYl
|
||||
yPxAX7sZbtm/yxNdMb+zcjalj4OUIJ1lU3TeMT54agb9r/e2w5cRrs
|
||||
oJ6bY2wPHVUzhDC5vbU6yM6tfbMil7JWZ5ndko1Uuq1TJPaQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey ReturningNovice-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDsQE/oxAVXXKx5bf
|
||||
lc2LV1yUP8GAur30w1DseR3Cf19TzMCBTgXVNESjJZntxs1ozG3Bce
|
||||
+dbTFsxVb63UMC0RngA27sWR/2K1HOEKlIWXG/ajnx5yMwT6GdxS/w
|
||||
v2UOXbmR8IP6buK6fsMzEDGUlVU2Aajt3ovPAE7xwYApE6rwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey echelon-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEVlT4Y2IpJU/s8e
|
||||
vqKZxCii1OG+FGHh8sNVdaM830P2ymOf6z4G+TAcp9vsz8lKVSg8O0
|
||||
T5Hpxuujr/suYVBgsqRT6iGqkPw6ElmdNFp0DhJBRI851u+b3/yeQv
|
||||
0YGABkZ0AlSNIssjQFxaynGRLnjvYbcnVEJ++a44jILwiqbQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey thelastcode-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWYhkspKLVuyn1i8
|
||||
/h++Lf9gn3GMd0VF6o15PFqFisQC7M4T5rvCJZby414HemsllhDuA+
|
||||
NbP4hPB6AU+vSMSv8S5GN/b92iz7dC3lNue4huUf+hDBzETRtYAtGD
|
||||
85ttMEBjgGMY4AGTGhI6JOYbAUlDUgUzIhjypNEgeQ9f5kCwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey monotone@killyourtv.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkX25gOPJkcf9LpB
|
||||
rd8vAqoLQItcT5FYJmzNYk5V6K1dCvT7qltVDvmbZ+jDeEirP9rYLu
|
||||
oHcDakfjEAbcwr0UyXIu4BV1Ib++3qM+kkM/NrOTbtFNZp5h5Zs8fh
|
||||
cXtrD4HkCM1fxgqwFP8M6l5cm+Z3w2MkZUoN7mJu7F95+obQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey JULIET-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDghepfaUmWTI7mM5
|
||||
Ytyawi7DaKAY1QJgQd4cE86WpOwQVCIrr5pKmQg+XLqTl4UwkjnKlE
|
||||
ZL3XU/DY8yQ1F74/P1w6EoTTm7EvA5WDrQhj3RiKeeSrhTUzi+gRLE
|
||||
4JmzqKv0Z9m0UJinNMdYck14bhXyJYheMqofr3Z7sB+LVtcwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey monotone@bilbo.srv.welterde.de]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDiqrTjNhYPus8ZOO
|
||||
GOAHuBrfxtKijVNs1NHwggHjeHEbpwQSmQ2uijyl+H3B3A7ErKwaPu
|
||||
J96SUlZv2LbfwkeFFU523FfvBJrUZgRLLhpWvYQWHlC+rIVcnOy9Ci
|
||||
aFexjw4QOrG9Hf9UAMEEissmea50jldEyiyLF8UXgemoESUwIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey asaf-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7zJ4ozJPSXmlUJ+
|
||||
ej8euN7qMo1kwXs++6EP/k1chkhAUUNokF8QAK3CXRCuPuVk0x6amn
|
||||
Pnay0fQf0aUANIKHtxxE2LEf9Jt2AD8FuDjsKcOxAUbZlWeY4W54H5
|
||||
ty937NL5Tn7GUrURpcUvNbs7h9ZlSMpmzZnguFjuXnL67s3wIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey luminosus-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1Qz/jUeOfzT+ZNm
|
||||
53INSMm4XUGAjXS+0DDnp2XeKgDkvQzMnjOy/+wSaBB+AJ71CM7/2K
|
||||
u0TN/SZhJUx/AvP/WBKL4rvLkdmVS8MDGjpmk+ErD5d9U/27+xw6wP
|
||||
MIDi4WGmTyjLS5nYHcrQa7SjW3xGQuyfWJXa2RuRMMtmum3wIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey zab-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI/VD0KtrPPaCSQ
|
||||
PHse4p53ze5yi/0CePfbh1YXTJieUzCGpD76IjlpRB8sRYIevWGglO
|
||||
jac6fhAA97VMlSmZHIxtBw3U4Y7kTkdZcsgkKTa756ge5UeURVmBaU
|
||||
Zevb8DDRREUQ3ELt6bit9iQhOvsAeUNiB1IVmRRBXrYIQhSQIDAQAB
|
||||
[end]
|
||||
|
||||
[pubkey anarkon-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBZVg1jgWAWLn/6y
|
||||
C9zd4OqFuSNiWDH9hVA0kWNJvdhylp7bCP6Pd2mgNesyV1K9girW1M
|
||||
2r300Csm5v7kff8/ct3ef5HyoBMn2Ex8SgAmir2Pjgc6lFsn3I8hOv
|
||||
FAkUwH1CFtg6sjKUJMJQJbisfPmnhu20Ptf6VXaQtaG/JgCQIDAQAB
|
||||
[end]
|
||||
</pre>
|
||||
|
||||
{% endblock %}
|
735
i2p2www/pages/site/get-involved/develop/license-agreements.html
Normal file
735
i2p2www/pages/site/get-involved/develop/license-agreements.html
Normal file
@@ -0,0 +1,735 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}License Agreements{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<p>For more information see <a href="{{ site_url('develop/licenses') }}">licenses.html</a>.
|
||||
</p><p>Following is a monotonerc file defining the current trust list.
|
||||
Developers must use this file in ~/.monotone/monotonerc or
|
||||
_MTN/montonerc in their i2p.i2p workspace.
|
||||
|
||||
{% include "include/monotonerc.html" %}
|
||||
|
||||
</p><p>Agreements:
|
||||
<pre>
|
||||
|
||||
Complication:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit
|
||||
is implicitly licensed under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit
|
||||
under the terms I am committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||
|
||||
iD8DBQFHyXwu+h38a3n8zjMRAjeSAJ9MFx/ENbUu8+3/U7KTj+FGL/NkHQCdE38G
|
||||
IWV1Gaqcis9sFEW7Nh0hY+c=
|
||||
=WPeP
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
zzz:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
I affirm that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||
|
||||
iD8DBQFHyaYXQVV2uqduC+0RAhn4AJ40JO/ep1JhmghjPU/IeISIa2fY8ACgiuV0
|
||||
vOCHNLZ8kiXKc8cTzYHGnU0=
|
||||
=ZzDd
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
welterde:
|
||||
Received by zzz 2008-02-16, need to put clearsigned version here.
|
||||
|
||||
|
||||
Oldaris:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it
|
||||
|
||||
Oldaris, 2008.07.15
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||
|
||||
iD8DBQFIfQjqzZzOariGyHgRAgR3AKCBFidvx7u1xp1UcNPZSX4VcHMQmwCg0zos
|
||||
IfrFyqSeeuhGoGVoq8godnY=
|
||||
=GSEI
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
Sponge:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code they commit under the terms I am committing it
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (GNU/Linux)
|
||||
|
||||
iJwEAQECAAYFAkjc2NsACgkQEGXqrGArRL24pQQAheyOBJiLU4wtbXFL5kVny3PZ
|
||||
W8syAlzBC4sbOm3PkG9YLWh38Lnl+JPvVklRHJbpjRLEfwx6VwEiJRfZB6u+X7x/
|
||||
qRwzjH6HYjz+tX3OAcj0MYH7yr09DLaJ26171X08BXoNpYuu4WWkXx8QnfgvZKVF
|
||||
TeTxhTBL/iWBPKCF2Tk=
|
||||
=+5bk
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
Dream:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit
|
||||
is implicitly licensed under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit
|
||||
under the terms I am committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAkmDVuwACgkQ9BQnlhdx/DlVugCePaRdhpg3qiOyQ71HeiGxT528
|
||||
RmsAoLyxOkGxHn9FO+BGMabzeLAq2vV3
|
||||
=Cqfg
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
MOSFET:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to any code I contribute to the I2P and Syndie projects,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit
|
||||
is implicitly licensed under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit
|
||||
under the terms I am committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAkmFAWcACgkQZ6SDODlcTO04JgCdGy4duWKRaTWkEdq8GW1ukOkU
|
||||
+YAAn1Ch68XJZqLfXqJU3igcRjWbapD1
|
||||
=64sn
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
mkvore:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAknVxdQACgkQUbTVRUoTVGhKUQCfWs3bw+fo0wqbKcURotncsfsA
|
||||
uJgAnjnImkb5iEDp5vCccQO4PDGYp2+u
|
||||
=0iW6
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
Mathiasdm:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit
|
||||
is implicitly licensed under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit
|
||||
under the terms I am committing it
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAknYaiwACgkQSgosdkktX9aE1gCgsQhfzyHhSLWrRsDfCz+HaITD
|
||||
ApkAn2RjN+wpldf52Ur2nTVSvpLiHcik
|
||||
=Znrk
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
dr|z3d:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
I, dr|z3d, do solemnly agree that, in respect of the Invisible Internet Project (I2P):
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (MingW32)
|
||||
|
||||
iEYEARECAAYFAkpN+Q4ACgkQ00a8KJajPMJdjQCfWBovGyOKbZkvL47+FNX5s+14
|
||||
f3QAnAkcOZYQ6rbPG8N8orH7+BMGvfPf
|
||||
=UxMM
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
cervantes:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit
|
||||
is implicitly licensed under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit
|
||||
under the terms I am committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.11 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAkpa5VUACgkQxQxxfQtaKXwKcwCgm8yLYdv+VtjS+1P89U4zQxL4
|
||||
IowAoIghIIWdMs3oMJpGAXfXTqpjRwXJ
|
||||
=lNJP
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
blub (BlubMail@mail.i2p):
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
1. Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
2. If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
3. I have the right to release the code I commit under the terms I am committing it
|
||||
|
||||
One warning about 3:
|
||||
German law applies for me and in german law the concept of "public domain" doesn't exist. Its also not possible to waive all rights to the extent the "public domain" concept (as understood in the US) requires (for the ones speaking german: see for example http://de.wikipedia.org/wiki/Public_domain and http://dejure.org/gesetze/UrhG/29.html). IANAL, but I would guess that this is relevant when I commit code, even if I2P isn't a german project.
|
||||
|
||||
I don't really care about legal issues but since the whole point of me signing this seems to be avoiding legal issues and/or uncertainty which code has which license and similiar issues, I thought I should say this. If you don't care, ignore it. :)
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAkqjRpgACgkQD9YhRSUxPSd74wCdEIHUauSInrfmhXlcx3t5pwrh
|
||||
9RQAoNy6BW1qSSGhu+Jd2EQ8fQOoO13q
|
||||
=LG0S
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
walking:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
I agree that, in respect of the Invisible Internet Project (I2P):
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.10 (MingW32)
|
||||
|
||||
iQEcBAEBAgAGBQJK3xwEAAoJELST8RRG8p88DQsH/2cMRMtDiaYKNF+fQvdSKuQI
|
||||
igqRJnnIr/g5s8alfikRhm6MqR/q/vsWVfQlKs+KwL+15OKPjJJtxahp/CsWu5ZX
|
||||
edHZv4nKGuSB7FvUoy0Lz6LRlu0HgZl7nli6YNVYbfbAQ1QbPY3wbvRxkLyHy1Zm
|
||||
kB1XyfzOvA9gpu6r3NLUR8a5mhDUbOtNR8IxoNC/Z1ogsf1c5kzbz0ncHPiV1wMx
|
||||
WZYIJ6vaa0BzJcEi2BDQWsPasEoMlGiK1+WXrjTq4lYcJYu+xrNFh+ofbRYqYhaf
|
||||
3sGSCgK6abMlQeoO1aO5uo6CRI/Yvrfp5G5y7S/yDOq03glK3RnPAYlmc3s6VLY=
|
||||
=i/D9
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
neutron:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Hi zzz,
|
||||
|
||||
I agree to the following :
|
||||
|
||||
- - Unless marked otherwise, all code I commit is implicitly licensed
|
||||
under the component's primary license
|
||||
- - If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
- - I have the right to release the code they commit under the terms I
|
||||
am committing it
|
||||
|
||||
Neutron
|
||||
- --
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.11 (GNU/Linux)
|
||||
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
|
||||
|
||||
iEYEARECAAYFAkr3D7MACgkQDkulOvK9/Uww+ACeJ/ILV87A7AtRqJI78MutKlxr
|
||||
IpYAn0MXlHOB9aA7aR07Kj95pvF8A6wv
|
||||
=AUjh
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
HungryHobo:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit
|
||||
is implicitly licensed under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit
|
||||
under the terms I am committing it.
|
||||
|
||||
HungryHobo, 11-3-2009
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAkrxDEMACgkQHix7YXbc3BL+GACdGH9r4WWqnZS4ZHdvhq2kEgEH
|
||||
FQYAn3gMHNDEBh6YD8KBK4UT/v89PRmy
|
||||
=EXov
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
russiansponsor:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAksZr28ACgkQg9RXHZerbBDNqACfa1EHKmqFbX0F3MOaAqln9NMX
|
||||
JcYAn2dmuA6/jdJW7VikLQbNrKasqG6a
|
||||
=WsTC
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
echelon:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit
|
||||
is implicitly licensed under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit
|
||||
under the terms I am committing it
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAksaywwACgkQXE9k4qzN3VNuIwCcDR2NL7aVAs+DftvFkoqy9Bnx
|
||||
7zUAn3PYwfChW0MYdX2EsxV/DCHgk7y0
|
||||
=HEKB
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
4get:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed
|
||||
under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit under the terms I am
|
||||
committing it
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iEYEARECAAYFAkseTgMACgkQSH2S/jaH2VEYeACgsPSxEXAxWfyQ3/qNpJhbBTlh
|
||||
Q/QAn3tS6UisuXPCFDh9N4BxcscjSD+5
|
||||
=6DAb
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
duck:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed
|
||||
under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit under the terms I am
|
||||
committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAkulRM8ACgkQHV6vOQfY4WwZswCfTjd7ktLjgqXPL7gvt6z2dxTQ
|
||||
aFAAoJn1aPHVbMw/9FmkTmPSruVFs8V1
|
||||
=bgCE
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
privateer:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit
|
||||
is implicitly licensed under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit
|
||||
under the terms I am committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.9 (GNU/Linux)
|
||||
|
||||
iEYEARECAAYFAkwKdKoACgkQTo2HeGooF8zClwCfVh8uaCHNP4MQwrB1egFKO40j
|
||||
aqEAn3zAoSf0hCbTU/A489RKeQ6DA6GM
|
||||
=mA0j
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
m1xxy:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I, mixxy/m1xxy, hereby state that:
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it.
|
||||
* The following is my monotone signing key:
|
||||
|
||||
c9b970f5e8917eada663d4c6b22096617021c95c m1xxy@mail.i2p
|
||||
|
||||
[pubkey m1xxy@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/aaFUq37RQdJpMC8aacqYLdd88wNVjwI+4HY5d7a61HvYIAecg1KJlq/CDFFrygmCcusnFaBmmBQFLO+gJXPKi9PMo1vaENiqCTVfY4EUpMMYzpuqKMKjyfuT6eoOHCZEKfZosUowyJt61FsTzGu+B9y27d0jxXwXT/fml100EwIDAQAB
|
||||
[end]
|
||||
|
||||
mixxy
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.10 (GNU/Linux)
|
||||
|
||||
iQIcBAEBAgAGBQJM1gjUAAoJECDrk8/2C++w+WwP/1GLBHpTGYiDO/zfqECgVRu2
|
||||
S+qxTdEWcJyfz1MY8tJ9vMIhlr66jxveI1KZ4sNUln91yPR2KDgMrBa31wL8IHAz
|
||||
T4uj7paMt8zLtptMbn2nGqdl/X3fmGloDQvW/VB0MWj3YpBgxXiMfEf3Mv9BcnV4
|
||||
B6IUvnXAWVe86Dlon1KLoQjAB3hjiGZV0vUV8sjEOYxX/qztLAfP1FPHCRdKlNYY
|
||||
hb2zNdRTHlCF+CKdZ+TX4HB7qlsjYUbhRJhh2pN2Rwz/2w/CddwXQ4jaKjCkn5T9
|
||||
D5Ekz4/b68doGq1hhjTf/GZ1FqVt+gkYr8MYPGZP5oJ6O4X5yPc3QhRy5cMlERSj
|
||||
S5+lXB/nM09w5bScHtdfHauxUI/vWOdF78BzCJHhOBBHZ/jrsV2iX6QDaf+X/FbT
|
||||
64SWXTa4jzQeE7MafF9Bkex1rWGJiom5Ew4NG73e1GyGtkwvRV6j5H3AKvpgRJzG
|
||||
G7W3/7MSZjNP7aIs2+BqYe9YveV0GCzC0l0lhIHvKNzRv6Avvvx7krORMQZqSt1k
|
||||
lVPIAUyoW+ScB+E26dVpRFne/0q9yUcQOeKyqehGCEFtgqQCqLsdTHynxayp58bJ
|
||||
lccrgLY+pzPpNg5w/5kJFm70ih9MOHRdRik9TiGvj56tzLUEPrD7WeMzl4mkeg0Y
|
||||
2WPghzlpoV5C1SJkv+dR
|
||||
=YLVN
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
hiddenz:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I, hiddenz/anon8373/slow, hereby state that:
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it.
|
||||
* The following is my monotone signing key:
|
||||
|
||||
[pubkey hiddenz@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnpEeIignM2UUsJT9+hSMcVOUuf0PZTxi9G3zRhDjal8Qdy/NUZQELAc6/gBhnZcSP4BHp/0BTTxXthlTjko8nkwx+EgzQO425Vgb1v/7RneCqEDjMP6QyZUOn1Hi2UBw+jvnbjFk1wDqt9BPdAKITfp3l7bR1xGr4gs1M4MSrcwIDAQAB
|
||||
[end]
|
||||
|
||||
hiddenz
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQEcBAEBAgAGBQJM3u7uAAoJEFp3lNknxN+16HoIAMNYVELPBHOM4iqO1lWeFqmK
|
||||
mSw/+eME05KvboZUq9SsJjInUkxlbfDWHf/DuUlCnTPePuQY+wTQPOa18ncldG0y
|
||||
bgO71WnCSyIydrw8dIUtMBfvVzcSP4c5h0ty10Dw+YxdKL2TLTIw4JuqYCPhE4cm
|
||||
1IqBfHT5or7A2ahCXLkUt2YX9NW9SAl8xUs+/g5rzc42EAgh656JK83G7kA38UID
|
||||
nn6ZA+A/3hrTe1+lJ0yHa6sCnJGJ6+tdJlLzjeU6K34cRPCcn2sPO9LUlM6VHVga
|
||||
AkTEFPvxhJC9yJ4cgIJ5AlrcF8B4Ufb0gsfsEfebAl1puA0C/MRxywTSjZTTB3k=
|
||||
=UDcv
|
||||
|
||||
|
||||
hottuna:
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
hottuna:
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit
|
||||
is implicitly licensed under the component's primary license
|
||||
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
|
||||
* I have the right to release the code I commit
|
||||
under the terms I am committing it
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.16 (MingW32)
|
||||
|
||||
iQGcBAEBAgAGBQJNKd3GAAoJEBVx72WXYlXhZjEL/3miyEMtggiJF73UJ26qLyAp
|
||||
9vFqoztcCHZTdDS3jpXaDY3v2WnfT6bB3eQjrFYkwDO8UpVqjdCnPUhs/sqHg0eX
|
||||
eqesy6IqDhluxJTO3vlvgBJVh449/g1P15hOQ1aR3vv12okmv85yOD7qbprkAZ9P
|
||||
J2uByT2L1EaLUuYVABVkmoZyBhvmSFZkfvXmToYlywo413r36mW4M+Y7yFkBuw0x
|
||||
aEvZ43zVVDaMsJQwTPdcUb4RmfSPk8d15FOr9WbWzSfKhUZ1HUtCWjPUuYWPzIrg
|
||||
APnJswb07ekm8G9bPeKctOg8lJnJTbM0HzA1KGaCzvpJ+asz6HY8+2mq5RzvQ5XX
|
||||
+6x+heNjNNG6f55cdwTw+ivWcsZiKDliAMUWlSkHMoWLjdzYOzrCM0vNf+BQMYeU
|
||||
+Qg/bOU4Pt11Hfn5/PwY7zdK3KTp/bqtWE6kBdlFXtnPdZKaYtUTmwdCgB/2EC2T
|
||||
pJOW/MBcMyHC5MxdistNFpXDv4O8dt7SNe83ADB2bA==
|
||||
=aXNE
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
hamada:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Hamada affirm that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly
|
||||
licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed
|
||||
under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I
|
||||
am committing it
|
||||
|
||||
Hamada
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQEcBAEBAgAGBQJNUs9+AAoJEOEGJ9ydVi3DddMH/0Bl4Mh3oSWFfx8peOj2JG2z
|
||||
bXHrK7kDHSK+aJrcFORQ4YPg2INjCH5GDDxaALhHKnVpTqZHy2F+RWII1SYVnU6l
|
||||
SQKBKOKw4bHQZSS0ibdsRkUbP1cyoxR9bh0SXfDFjwLu3rzsU4FFc6vmRAIdwiOo
|
||||
xQK3RpiPpzegsZPOFr4+vHIJUGcgGce86EIjC5VSoQHb3gHXsnsYGYBIszEj1MZ4
|
||||
OCzbjV7Gl44sZ6R8Q2AU1Dita7ANJv6bkbk8W8Rurxqi2lUDHiWkW2XaoZ18mvnj
|
||||
dZ65tC2kHgJHVU0oIn5rGMA7uuQizFL0d6pzQfJgw1hMA29sGQmxovy+Bp85Pqk=
|
||||
=HeGr
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
magma:
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
I affirm that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.14 (GNU/Linux)
|
||||
|
||||
iQIcBAEBAgAGBQJNg8FwAAoJEKiufQgd4cCY8sEP/13U7rmFMyYgbITiJHxRM/Kl
|
||||
BFW/iVYPqF4Kr9qjT0S80kOw0wvHctWGPAoHv23YxUYRrJuW0gd5EAdv+1KQBmE/
|
||||
lpKaTXMAt8DKba80dRk5I1S6SnJhAKyesF+nlxi53EfqIp1mRwSwzzRWgx9mz08R
|
||||
jJSyEbPHX/ipwmohEAZ1diIYQv9QFjrrXOv+avFZgm56tj3ckBtKZNuZ+P/0sttJ
|
||||
zmom7H7v9O1WlHiF50TuiLRM8V4XMKRRFw2GHaUgC/Uh5jN6PHEBoeQT5ssXvVIu
|
||||
7IcCx9wTmABoGo2PALO51C+2aMvDXFml7QCEjwKtG2zelWJLXR1tyZuQdn+fxLa0
|
||||
CDLc/V4mSgjscNN9gOJwX8AIUqwzA/SalZ5ng6gs6IqHk6wnrznw5kKNsEi1FInI
|
||||
n2MlDsgCiv1D6gqqOYEJYrWYmQqOoU7fNi/cgi9vJ1XQOA0pd40SeoNMNzs4LmIu
|
||||
oPifPJ+ODqfxTeBGSAZ3UDDdv80hzFlhMXHKk/a0+CpsBd1OmIkE+YhCQTI23wfv
|
||||
xBzzO3WoecufpM1Ykg0yOYlGJ3IMJ1n7zvobJfiExeLDBM7fPFmJqB1sFRyV0n9f
|
||||
sNMV1SjtLKZr65oePxFL1ludkQ6aMqlLCzNOSec6cUUSnkd+YwieT5yFpOXb6d8a
|
||||
w4O9LtQO1R4tgrVXhBw4
|
||||
=j/xY
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
kytv:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
I KillYourTV/KYTV affirm that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it
|
||||
|
||||
[pubkey kytv@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMMTHQs4AQ0KuXjHsPRvfeBo2EydIAcGcBH7VCO26AofX2ns3ezTKfvmv6QcFhcxn41I6OdG29DdFVRz4D8hIZvOoFYfe87nswgyXW85rEilJP02Z8HCr/dcYJbPsWAlMr7/UIDsT/9swd0U6QTf9X2W+VORyhDdYXcG8zikBqXQIDAQAB
|
||||
[end]
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.10 (GNU/Linux)
|
||||
|
||||
iQEcBAEBAgAGBQJN0b3UAAoJEKvgwxnfCgoaQaMH/RdNoOt+1lm4cztvv5f2QBL3
|
||||
W4h3PjloDqkLE4ATDm+AcctahQaWuA221AMOrhR0aS+93wm+mOxzSmeoE91V475n
|
||||
2fpC/zWx0WRAzjQkr1M6OkcXNy6f+H5/UkBcaivzI9y5wUv5ETUHwiy+5qzG4oQ7
|
||||
AzbPHeJic88c6dyGX6rwa5VFMXLKYnr7h/i562/Ynaqus8tu/td1KEGkdNFgW4We
|
||||
y/aXYqaNYtds4xova49m99Y5u1kfKltv4YVEwY5a7Cj8p/31aeD8c10rWrf00R9H
|
||||
XlL2/b0lIx1C8CAK5TmdrD8G1SXl614SJTGuQfBT2N6yCT+jcrOMJIghCZhvmLQ=
|
||||
=U1Tw
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
str4d:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
I str4d affirm that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license.
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses.
|
||||
* I have the right to release the code I commit under the terms I am committing it.
|
||||
* The following is my monotone signing key:
|
||||
|
||||
01265f0c817b24548478341fb75e672720a78b21 str4d@mail.i2p
|
||||
|
||||
[pubkey str4d@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe4zkWVW8fBXGtnMpWbw316qbxWhKdnM86bnPyU3a8C2ERaofESzoZPXm21BR4jEqHLFzVzni4MTAJ+J0XjW70Le5DZTm/AG18qXd8UsK2+IreCHqnv5XPL8Lw8oY6zNoT834emGqH2n0T98OHF6zNUStBrvuv9AFPa6FZocF2mwIDAQAB
|
||||
[end]
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.10 (GNU/Linux)
|
||||
|
||||
iQEcBAEBAgAGBQJPE5faAAoJENXeOJaUpGWy5kUIAIhe1ow0VpMgJitkBr8cBF8B
|
||||
iJoKJ/DrCQ+XGk8API05VpyW0BLnG9qVRZh8DZux3NealIk3k37gN5rVHas0vpjU
|
||||
5qzqFNwpeyPSSFhylLMqf3fYdjJJZieZfWU/XW7HUMYGgZ03Lq95sxPRPyl8A0D8
|
||||
2ahv537Vy4EOZCdE8CvBgS/Hk0TVrG9EPL/vR1T6cx9YSV5/R0xiNNKujgoUHurX
|
||||
8gHudomaEf+VxqDFCFQbjIWqDuf1sm1eRQokvO+wELqNjkUsWhDMAS54EjTmYN+h
|
||||
Zc8XFXkeLUdRU6zJHo0tRWo0zswIW+a0r5W+T5MHwUnYOiTUUVgOjtwTGN7uURQ=
|
||||
=nEwG
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
meeh:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Applicable to the code I contribute to the I2P project,
|
||||
I hereby state that:
|
||||
|
||||
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
|
||||
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
|
||||
* I have the right to release the code I commit under the terms I am committing it
|
||||
|
||||
Meeh, 9 Aug 2012
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAEBAgAGBQJQJC9mAAoJELj1P6o1Twr4+i0QANHrOH8CyUJHVXkbTAxRdKW0
|
||||
u4avJvhQchyXjGvEPxYzUbQw2th41XlaNVKXgoiWTMKdOc88kkhL9dHj8yasMIHI
|
||||
hncureihJ7bFS11IFBauqP8nV8UG3oONq9GqzW+6YxQ4SL6UAMP84iXCfB6W0wBd
|
||||
ZE/06i5ezdsbeGfIgbrgkNsQMVcGRrbV5S3kBbW+lV4RitEsF2qb2IYlwbSUUSL9
|
||||
/7/8FX87xocLRs3GOjhmRiyifMSoSRShnmMmckDNGlkY3Yz19HSThE47xnyg9Aaj
|
||||
NYzmZMJFVnY6Rt1d4iLEw+/DUlYqs0afovHT2MnqymuN89204I6Yccn3n6AGKJxx
|
||||
yJX6U4x49BwohG7ZW1S9RINoobqcg3l1Ne1Lp5EBe8jyxFjz0n1684biDuyKJx/o
|
||||
ryp8mJ2cRKEWOduAyIChMeo/tFaDkMg/tTyuLrpSw404XpXa4EaUUlbZVQRHf25g
|
||||
1Kil1XL+KhFcAP3hgjmpfc2ukFcL6j09yI0eZhlkJLosI+lKMpK3dqcjbdOiOauk
|
||||
vQlJdkYZyxW2AReymH2XDI+cDg8tRw9iU22rAABXFs8zy5brK2Gjn1DK/sEVIdna
|
||||
NVr7aW4hiQWqHVWivVy5Otf8Ioacoi8i2NISZtbCc68WtEkoFmEdW7QB+kwSsXIq
|
||||
R2VFZ/114yCNY74KmujA
|
||||
=jfFH
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
zab:
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
I declare that:
|
||||
|
||||
Unless marked otherwise, all code I commit is implicitly licensed
|
||||
under the component's primary license
|
||||
If specified in the source, the code may be explicitly licensed under
|
||||
one of the component's alternate licenses
|
||||
I have the right to release the code I commit under the terms I am
|
||||
committing it
|
||||
|
||||
zab (topiltzin on irc)
|
||||
|
||||
[pubkey zab@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0H8bP/f8v7KjnyGlZGWQsF5G3ppvJ1Kwt/dUGi7gHbclKPnFAWXmb7YWOhl9Ua2USjQ4YrIeB7/2uVOpe+3FrFgUzIiWsx6I2yiNI3TscDvQsa5wG0Z2G4BbHXjONyiUzzO+j2TWPs3x35r2LCy8plRzPAswCF1GaIEjJCce5zwIDAQAB
|
||||
[end]
|
||||
[pubkey zab-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI/VD0KtrPPaCSQPHse4p53ze5yi/0CePfbh1YXTJieUzCGpD76IjlpRB8sRYIevWGglOjac6fhAA97VMlSmZHIxtBw3U4Y7kTkdZcsgkKTa756ge5UeURVmBaUZevb8DDRREUQ3ELt6bit9iQhOvsAeUNiB1IVmRRBXrYIQhSQIDAQAB
|
||||
[end]
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG/MacGPG2 v2.0.18 (Darwin)
|
||||
Comment: GPGTools - http://gpgtools.org
|
||||
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
|
||||
|
||||
iQIcBAEBAgAGBQJQmQeOAAoJEJkeLHPsdqhZgOUQAIRzuQZ3yF1r+P0iO390r+qy
|
||||
RxU0gQiPJDqDixDn0u8EAb2ljRWHTBfy792hs0nUu2//fNCh6chd7tbmJQn02Rm9
|
||||
nDICr2Lex6a9j498yWnkh0ZHq9yd1CPGT8xo3DW/KzLmqj+8xNUmx9RI3Y32wL9h
|
||||
H/O0VsGN0FhYeLU0vBlNkb+Vs9e0wY3/qCVMo1ldjVPahz6bblYXKVxfRhCThdfS
|
||||
ufUH2wqaDUozKabCeuM0xlll3PuaL2cATjUJuVWvO4Lahf6EZZBUvEgiW95wAL3q
|
||||
dFxZw9hUmFC4p30p0N+fQND/7aGfwujQO++S3D8gizqzSovaFpXxNzoQ6hSUWjI0
|
||||
+KsvbJXu0IguUen2p/Ka8EB0yWokYjIUH4V2kLt9jVJLuoSkejnTrFQuPIR1Qmcr
|
||||
31wqWJMWWbbFBR7KrPaDnBnRej5aIyZnHIyTtgUKhO+paDGQ0IYDirgXP10MtouY
|
||||
4Hl5v2OwhOwv/mPOm74EwJknFPhQThgxO8zG9sTHq5Lteb5SwaPLdZi7CruVU66p
|
||||
uCol/dZqVwrb2iVD19S4MvNQiOVQEWFKeBrxxBkT+qcGIWLMsG/o1qu0+VHpWQmo
|
||||
G4Adgew+7tIkak/71ss1pvUi05WsPP9KyzXrwqcFyoAmMFPtgxUIVYVc1kwYb5h3
|
||||
G58Br6HXTQLV8xAN1ml8
|
||||
=4989
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
</pre>
|
||||
{% endblock %}
|
311
i2p2www/pages/site/get-involved/develop/licenses.html
Normal file
311
i2p2www/pages/site/get-involved/develop/licenses.html
Normal file
@@ -0,0 +1,311 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Licenses{% endblock %}
|
||||
{% block content %}
|
||||
<h1>I2P Software Licenses</h1>
|
||||
<p>
|
||||
As required by our
|
||||
<a href="{{ site_url('docs/how/threatmodel') }}">threat model</a> (among other reasons), the
|
||||
software developed to support the anonymous communication
|
||||
network we call I2P must be freely available, open source,
|
||||
and user modifiable. To meet these criteria, we make use of
|
||||
a variety of legal and software engineering techniques so
|
||||
as to remove as many barriers to entry for those considering
|
||||
making use of or contributing to the I2P effort.</p>
|
||||
|
||||
<p>While the information below may be more confusing than just simply
|
||||
stating "I2P is BSD", "I2P is GPL", or "I2P is public domain",
|
||||
the short answer to the question "How is I2P licensed?" is this:</p>
|
||||
|
||||
<h2>All software bundled in the I2P distributions will allow:</h2>
|
||||
<ol>
|
||||
<li>use without fee</li>
|
||||
<li>use with no restrictions on how, when, where, why, or by whom is running it</li>
|
||||
<li>access to the source code without fee</li>
|
||||
<li>modifications to the source</li>
|
||||
</ol>
|
||||
|
||||
<p>Most of the software guarantees much more - the ability of <b>anyone</b> to
|
||||
distribute the modified source however they choose. However, not all of the
|
||||
software bundled provides this freedom - the GPL restricts the ability of
|
||||
developers who wish to integrate I2P with their own applications that are not
|
||||
themselves open source applications. While we applaud the noble goals of
|
||||
increasing the resources in the commons, I2P is best served by removing any
|
||||
barriers that stand in the way of its adoption - if a developer considering whether
|
||||
they can integrate I2P with their application has to stop and check with their lawyer,
|
||||
or conduct a code audit to make sure their own source can be released as GPL-compatible,
|
||||
we lose out.</p>
|
||||
|
||||
<h2>Component licenses</h2>
|
||||
<p>The I2P distribution contains several resources, reflecting the partitioning of
|
||||
the source code into components. Each component has its own license, which all
|
||||
developers who contribute to it agree to - either by explicitly declaring the release
|
||||
of code committed under a license compatible with that component, or by implicitly
|
||||
releasing the code committed under the component's primary license. Each of these
|
||||
components has a lead developer who has the final say as to what license is compatible
|
||||
with the component's primary license, and the I2P project manager has the final say as
|
||||
to what licenses meet the above four guarantees for inclusion in the I2P distribution.</p>
|
||||
|
||||
<table border="1">
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>Component</b></td>
|
||||
<td valign="top" align="left"><b>Source path</b></td>
|
||||
<td valign="top" align="left"><b>Resource</b></td>
|
||||
<td valign="top" align="left"><b>Primary license</b></td>
|
||||
<td valign="top" align="left"><b>Alternate licenses</b></td>
|
||||
<td valign="top" align="left"><b>Lead developer</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>I2P SDK</b></td>
|
||||
<td valign="top" align="left">core</td>
|
||||
<td valign="top" align="left">i2p.jar</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">zzz</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>I2P Router</b></td>
|
||||
<td valign="top" align="left">router</td>
|
||||
<td valign="top" align="left">router.jar</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">zzz</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>Ministreaming</b></td>
|
||||
<td valign="top" align="left">apps/ministreaming</td>
|
||||
<td valign="top" align="left">mstreaming.jar</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">mihi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>Streaming</b></td>
|
||||
<td valign="top" align="left">apps/streaming</td>
|
||||
<td valign="top" align="left">streaming.jar</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">zzz</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>I2PTunnel</b></td>
|
||||
<td valign="top" align="left">apps/i2ptunnel</td>
|
||||
<td valign="top" align="left">i2ptunnel.jar</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="#java_exception">GPL + exception</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a><br />
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">mihi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>HTTPTunnel</b></td>
|
||||
|
||||
<td valign="top" align="left">apps/httptunnel</td>
|
||||
<td valign="top" align="left">httptunnel.jar</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="#java_exception">GPL + exception</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a><br />
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">mihi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b><a href="sam">SAM</a> Bridge</b></td>
|
||||
<td valign="top" align="left">apps/sam</td>
|
||||
<td valign="top" align="left">sam.jar</td>
|
||||
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">human</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b><a href="sam">SAM</a> perl library</b></td>
|
||||
<td valign="top" align="left">apps/sam/perl</td>
|
||||
<td valign="top" align="left">SAM.pm</td>
|
||||
|
||||
<td valign="top" align="left">
|
||||
<a href="http://www.perl.com/pub/a/language/misc/Artistic.html">Artistic</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">BrianR</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b><a href="sam">SAM</a> C library</b></td>
|
||||
<td valign="top" align="left">apps/sam/c</td>
|
||||
<td valign="top" align="left">libSAM</td>
|
||||
|
||||
<td valign="top" align="left">
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">Nightblade</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b><a href="sam">SAM</a> Python library</b></td>
|
||||
<td valign="top" align="left">apps/sam/python</td>
|
||||
<td valign="top" align="left">i2p.py</td>
|
||||
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">Connelly</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b><a href="sam">SAM</a> C# library</b></td>
|
||||
<td valign="top" align="left">apps/sam/csharp/</td>
|
||||
<td valign="top" align="left">n/a</td>
|
||||
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">smeghead</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>Addressbook</b></td>
|
||||
<td valign="top" align="left">apps/addressbook</td>
|
||||
<td valign="top" align="left">addressbook.war</td>
|
||||
|
||||
<td valign="top" align="left">
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a></td>
|
||||
<td valign="top" align="left">Ragnarok</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>I2PSnark</b></td>
|
||||
<td valign="top" align="left">apps/i2psnark</td>
|
||||
<td valign="top" align="left">i2psnark.jar</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="#java_exception">GPL + exception</a></td>
|
||||
<td valign="top" align="left"> </td>
|
||||
<td valign="top" align="left">zzz</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>Susidns</b></td>
|
||||
<td valign="top" align="left">apps/susidns</td>
|
||||
<td valign="top" align="left">susidns.war</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="#java_exception">GPL + exception</a></td>
|
||||
<td valign="top" align="left"> </td>
|
||||
<td valign="top" align="left"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>Susimail</b></td>
|
||||
<td valign="top" align="left">apps/susimail</td>
|
||||
<td valign="top" align="left">susimail.war</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="#java_exception">GPL + exception</a></td>
|
||||
<td valign="top" align="left"> </td>
|
||||
<td valign="top" align="left"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>Other apps not mentioned</b></td>
|
||||
<td valign="top" align="left">apps/</td>
|
||||
<td valign="top" align="left">...</td>
|
||||
<td valign="top" align="left">
|
||||
probably
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a>
|
||||
but check the source</td>
|
||||
<td valign="top" align="left"> </td>
|
||||
<td valign="top" align="left"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" align="left"><b>Installer</b></td>
|
||||
<td valign="top" align="left">installer</td>
|
||||
|
||||
<td valign="top" align="left">install.jar, guiinstall.jar</td>
|
||||
<td valign="top" align="left">
|
||||
<a href="http://en.wikipedia.org/wiki/Public_domain">Public domain</a></td>
|
||||
<td valign="top" align="left"><a href="#java_exception">GPL + exception</a><br />
|
||||
<a href="http://opensource.org/licenses/bsd-license.php">BSD</a><br />
|
||||
<a href="http://www.cryptix.org/LICENSE.TXT">Cryptix</a><br />
|
||||
<a href="http://opensource.org/licenses/mit-license.html">MIT</a></td>
|
||||
<td valign="top" align="left"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3><a id="java_exception">GPL + java exception</a></h3>
|
||||
<p>While it may be redundant, just for clarity the
|
||||
<a href="http://www.fsf.org/licenses/gpl.html">GPL</a>'ed code included within
|
||||
I2PTunnel and other apps must be released under the GPL with an additional "exception"
|
||||
explicitly authorizing the use of Java's standard libraries:</p>
|
||||
|
||||
<p><code>In addition, as a special exception, XXXX gives permission to link the
|
||||
code of this program with the proprietary Java implementation provided by Sun
|
||||
(or other vendors as well), and distribute linked combinations including the
|
||||
two. You must obey the GNU General Public License in all respects for all of the
|
||||
code used other than the proprietary Java implementation. If you modify this
|
||||
file, you may extend this exception to your version of the file, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this exception statement
|
||||
from your version.</code></p>
|
||||
|
||||
<p>All source code under each component will by default be licensed under the
|
||||
primary license, unless marked otherwise in the code. All of the above is
|
||||
summary of the license terms - please see the specific license for the component
|
||||
or source code in question for authoritative terms. Component source locations and
|
||||
resource packaging may be changed if the repository is reorganized.</p>
|
||||
|
||||
<h2><a id="commit">Commit privileges</a></h2>
|
||||
<p>
|
||||
Developers may push changes to a distributed monotone repository if you
|
||||
receive permission from the person running that repository.
|
||||
See the <a href="monotone.html">Monotone Page</a> for details.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
However, to have changes included in a release, developers
|
||||
must be trusted by the release manager (currently zzz).
|
||||
In addition, they must explicitly agree with the above terms to be trusted.
|
||||
That means that they must send one of the release managers a signed message affirming that:</p>
|
||||
<ul>
|
||||
<li>Unless marked otherwise, all code I commit is implicitly licensed under
|
||||
the component's primary license</li>
|
||||
<li>If specified in the source, the code may be explicitly licensed under one
|
||||
of the component's alternate licenses</li>
|
||||
<li>I have the right to release the code I commit under the terms I
|
||||
am committing it</li>
|
||||
</ul>
|
||||
|
||||
<p>If anyone is aware of any instances where the above conditions are not met,
|
||||
please contact the component lead and/or an I2P release manager with further
|
||||
information.
|
||||
<a href="{{ site_url('develop/license-agreements') }}">See developers' license agreements</a>.
|
||||
</p>
|
||||
{% endblock %}
|
405
i2p2www/pages/site/get-involved/develop/monotone.html
Normal file
405
i2p2www/pages/site/get-involved/develop/monotone.html
Normal file
@@ -0,0 +1,405 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Monotone{% endblock %}
|
||||
{% block content %}
|
||||
<h1>Monotone Guide</h1>
|
||||
|
||||
<div id="TOC">
|
||||
<ol>
|
||||
<li>
|
||||
<a href="#operating-a-monotone-client">Operating a Monotone client</a>
|
||||
<ol>
|
||||
<li><a href="#generating-monotone-keys">Generating Monotone keys</a></li>
|
||||
<li><a href="#trust-and-initializing-your-repository">Trust and initializing your repository</a></li>
|
||||
<li> <a href="#obtaining-and-deploying-developers-keys">Obtaining and deploying developers' keys</a></li>
|
||||
<li><a href="#setting-up-trust-evaluation-hooks">Setting up trust evaluation hooks</a></li>
|
||||
<li><a href="#pulling-the-i2p.i2p-i2p.www-and-i2p.syndie-branches">Pulling the <code>i2p.i2p</code>, <code>i2p.www</code> and <code>i2p.syndie</code> branches</a></li>
|
||||
<li><a href="#verifying-that-trust-evaluation-works">Verifying that trust evaluation works</a></li>
|
||||
<li><a href="#checking-out-a-working-copy-of-the-latest-version">Checking out a working copy of the latest version</a></li>
|
||||
<li><a href="#updating-your-working-copy-to-the-latest-version">Updating your working copy to the latest version</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#operating-a-monotone-server">Operating a Monotone Server</a>
|
||||
<ol>
|
||||
<li><a href="#obtaining-and-deploying-developers-transport-keys">Obtaining and deploying developers’ transport keys</a></li>
|
||||
<li><a href="#granting-push-and-pull-access">Granting push and pull access</a></li>
|
||||
<li><a href="#running-monotone-in-server-mode">Running Monotone in server mode</a></li>
|
||||
<li><a href="#differences-under-debian-gnulinux">Differences under Debian GNU/Linux</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<i>This is a revised version of <a href="transition-guide.txt">Complication's original
|
||||
guide</a> detailing the use of Monotone in I2P development.
|
||||
For basic instructions see the <a href="{{ site_url('develop/newdevelopers') }}">quick-start guide</a>.</i>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I2P has a distributed development model. The source code is replicated across
|
||||
independently administered <a href="http://www.monotone.ca/">Monotone</a> ("MTN") repositories.
|
||||
Developers with commit rights are able to push their changes to the repository
|
||||
(a <a href="{{ site_url('develop/licenses') }}#commit">license agreement</a> needs to be signed
|
||||
before commit rights are granted).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Some of Monotone's noteworthy qualities are: distributed
|
||||
version control, cryptographic authentication, access control, its small size, having few
|
||||
dependencies, storage of projects in a compressed SQLite database file, and
|
||||
having the ability to resume interrupted synchronization attempts.
|
||||
</p>
|
||||
|
||||
|
||||
<h2 id="operating-a-monotone-client">Operating a Monotone Client</h2>
|
||||
|
||||
<h3 id="generating-monotone-keys">Generating Monotone keys</h3>
|
||||
|
||||
<p>
|
||||
A transport key grants you the ability to push your changes to a Monotone repository server.
|
||||
In order to commit code into Monotone (in essence signing your code), a commit key is also needed.
|
||||
None of the public Monotone servers on I2P currently require a key in order to read (or pull) the source code.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Without a transport key, one cannot:
|
||||
<ul>
|
||||
<li>pull code from a server which doesn't allow global read access</li>
|
||||
<li>push code to any server</li>
|
||||
<li>run a Monotone server</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Without a commit key, one cannot:
|
||||
<ul>
|
||||
<li>commit any code</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you only intend to retrieve code from MTN, feel free to skip to the
|
||||
<a href="#trust-and-initializing-your-repository">next section</a>. If you want
|
||||
to generate keys, read the following.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
By convention keys are named like an e-mail addresses, but a corresponding e-mail
|
||||
address does not need to exist. For example, your keys might be named:
|
||||
<ul>
|
||||
<li>yourname@mail.i2p</li>
|
||||
<li>yourname-transport@mail.i2p</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Monotone stores keys under <code><b>$HOME/.monotone/keys</b></code> in text files which
|
||||
are named identically to the keys. For example:
|
||||
<ul>
|
||||
<li><code>/home/complication/.monotone/keys/complication@mail.i2p</code></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To generate transport and commit keys, enter the following commands at a prompt:
|
||||
<ul>
|
||||
<li><code>$ <b>mtn genkey yourname-transport@someplace</b></code></li>
|
||||
<li><code>$ <b>mtn genkey yourname@someplace</b></code></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Monotone will prompt you for a password to protect your keys. You are very strongly encouraged to set a password
|
||||
for the commit key. Many users will leave an empty password for the transport key, especially those running a
|
||||
Monotone server.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="trust-and-initializing-your-repository">Trust, and initializing your repository</h3>
|
||||
|
||||
<p>
|
||||
<i>
|
||||
Monotone's security model helps to ensure that nobody can easily impersonate a developer without
|
||||
it being noticed. Since developers can make mistakes and become compromised,only manual review can
|
||||
ensure quality of code. Monotone's trust model will ensure that you read the right diffs. It does
|
||||
not replace reading diffs.
|
||||
</i>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A Monotone repository is a single file (a compressed SQLite database) which contains all of the project's source code and history.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
After <a href="#obtaining-and-deploying-developers-keys">importing the developers' keys into Monotone</a> and
|
||||
<a href="#setting-up-trust-evaluation-hooks">setting up trust evaluation hooks</a>,
|
||||
Monotone will prevent untrusted code from being checked out into your workspace.
|
||||
There are commands available to clean untrusted code from your workspace but in practice they've not been
|
||||
needed due to the push access policies in place.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A repository can hold many branches. For example, our repository holds the
|
||||
following main branches:
|
||||
<ul>
|
||||
<li><b>i2p.i2p</b> — The I2P router and associated programs</li>
|
||||
<li><b>i2p.www</b> — The I2P project website</li>
|
||||
<li><b>i2p.syndie</b> — Syndie, a distributed forums tool</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
By convention, the I2P Monotone repository is named <code>i2p.mtn</code>. Before pulling
|
||||
source code from servers, a database for your repository will need to be initialized.
|
||||
To initialize your local repository, change into the directory that you want the
|
||||
<code>i2p.mtn</code> file and branch directories to be stored and issue the following
|
||||
command:
|
||||
<ul>
|
||||
<li><code>$ <b>mtn --db="i2p.mtn" db init</b></code></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="obtaining-and-deploying-developers-keys">Obtaining and deploying developers' keys</h3>
|
||||
|
||||
<p>
|
||||
Keys which developers use to commit code are essential for trust evaluation in
|
||||
Monotone. The other developers' transport keys are only required for Monotone server operators.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Developers' commit keys are provided GPG-signed <a href="signedkeys">on another page</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To import developers' keys after verifying their authenticity, copy <a href="developerskeys.html">all of the keys</a> into a new
|
||||
file. Create this file (e.g. <code><b>keys.txt</b></code>) in the same directory where <code>i2p.mtn</code> is located. Import the keys with the command:
|
||||
<ul>
|
||||
<li><code>$ <b>mtn --db="i2p.mtn" read < keys.txt</b></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>Note</b>: <i>Never</i> add keys to <code><b>$HOME/.monotone/keys</b></code> manually.
|
||||
</p>
|
||||
|
||||
<h3 id="setting-up-trust-evaluation-hooks">Setting up trust evaluation hooks</h3>
|
||||
|
||||
<p>
|
||||
The default Monotone trust policy is way too lax for our requirements: every comitter is trusted by default.
|
||||
That is not acceptable for I2P development.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Change into the directory <code><b>$HOME/.monotone</b></code> and open the file
|
||||
<code>monotonerc</code> with a text editor. Copy and paste the following two functions into this file:
|
||||
<p>
|
||||
|
||||
{% include "include/monotonerc.html" %}
|
||||
|
||||
<p>
|
||||
The first function determines an intersection between two sets, in our case a
|
||||
revision's signers and trusted signers.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The second function determines trust in a given revision, by calling the first
|
||||
function with "signers" and "trusted" as arguments. If the intersection is
|
||||
null, the revision is not trusted. If the intersection is not empty, the
|
||||
revision is trusted. Otherwise, the revision is not trusted.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
More information about Trust Evauluation Hooks can be found in the <a href="http://monotone.ca/docs/Hooks.html">official Monotone documentation</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="pulling-the-i2p.i2p-i2p.www-and-i2p.syndie-branches">Pulling the <code>i2p.i2p</code>, <code>i2p.www</code> and <code>i2p.syndie</code> branches</h3>
|
||||
|
||||
<p>
|
||||
Enter the directory where you initialized <code>i2p.mtn<code>. Depending on whether you
|
||||
want only I2P sources, or also sources for the I2P website and Syndie, you can
|
||||
perform the <code>pull</code> operation in different ways.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you only want I2P sources:
|
||||
<ul>
|
||||
<li><code>$ <b>mtn --db="i2p.mtn" -k "" pull 127.0.0.1:8998 i2p.i2p</b></code></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you want all branches:
|
||||
<ul>
|
||||
<li><code>$ <b>mtn --db="i2p.mtn" -k "" pull 127.0.0.1:8998 "i2p.*"</b></code></li>
|
||||
</ul>
|
||||
If the transfer aborts before completing sucessfully, simply repeating the pull command will resume the transfer.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Pulling in the above examples is done anonymously by specifying an empty transport key.
|
||||
If everyone pulls anonymously it will be harder for an attacker who gains control of the server
|
||||
to selectively provide some people with tampered data.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="verifying-that-trust-evaluation-works">Verifying that trust evaluation works</h3>
|
||||
|
||||
<p>
|
||||
To verify that trust evaluation works:
|
||||
<ul><li>Make a backup of your <code>monotonerc</code> file.</li>
|
||||
<li>Modify <code><b>monotonerc</b></code> by setting the trusted_signers variable in the following way:
|
||||
<code><pre>
|
||||
local trusted_signers = {}
|
||||
</pre></code>
|
||||
</li>
|
||||
<li>With <code><b>monotonerc</b></code> configured as above, Monotone will no longer trust any committers. Confirm this by changing into the
|
||||
directory where <code>i2p.mtn</code> was created and attempt a checkout of the I2P branch:
|
||||
<ul>
|
||||
<li><code>$ <b>mtn --db="i2p.mtn" co --branch="i2p.i2p"</b></code></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A directory named <code>i2p.i2p</code> should <b>not</b> appear. You should encounter many
|
||||
error messages like:
|
||||
|
||||
<code><pre>
|
||||
mtn: warning: trust function disliked 1 signers
|
||||
of branch cert on revision 523c15f6f50cad3bb002f830111fc189732f693b
|
||||
mtn: warning: trust function disliked 1 signers
|
||||
of branch cert on revision 8ac13edc2919dbd5bb596ed9f203aa780bf23ff0
|
||||
mtn: warning: trust function disliked 1 signers
|
||||
of branch cert on revision 8c4dd8ad4053baabb102a01cd3f91278142a2cd1
|
||||
mtn: misuse: branch 'i2p.i2p' is empty
|
||||
</pre></code>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you are satisfied with results, restore the backup of
|
||||
<code>monotonerc</code> that was created above. If you didn't create a backup
|
||||
as advised, re-read <a href="#setting-up-trust-evaluation-hooks">Setting up trust evaluation hools</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="checking-out-a-working-copy-of-the-latest-version">Checking out a working copy of the latest version</h3>
|
||||
|
||||
<p>
|
||||
If you already have a branch checked out, skip to the <a href="#updating-your-working-copy-to-the-latest-version">next
|
||||
section</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Change into the directory where <code>i2p.mtn</code> is located. Over there issue:
|
||||
<ul>
|
||||
<li>$ <code><b>mtn --db="i2p.mtn" co --branch="i2p.i2p"</b></code></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The checkout should complete without error messages and a directory named
|
||||
<code>i2p.i2p</code> should appear in the current directory. Congratulations! You have
|
||||
successfully checked out the latest I2P sources, ready to be compiled.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="updating-your-working-copy-to-the-latest-version">Updating your working copy to the latest version</h3>
|
||||
|
||||
<p>
|
||||
If you haven't done this already, pull fresh code from the server to your local
|
||||
Monotone repository. To accomplish this, change into the directory where
|
||||
<code>i2p.mtn</code> is located and issue:
|
||||
<ul>
|
||||
<li>$ <code><b>mtn --db="i2p.mtn" -k "" pull 127.0.0.1:8998 i2p.i2p</b></code></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Now change into your <code>i2p.i2p</code> directory, and over there issue:
|
||||
<ul>
|
||||
<li>$ <code><b>mtn update</b></code></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
As long as there were no errors…Congratulations! You have successfully updated to the latest I2P sources. They
|
||||
should be ready to compile.
|
||||
</p>
|
||||
|
||||
|
||||
<h2 id="operating-a-monotone-server">Operating a Monotone Server</h2>
|
||||
|
||||
<h3 id="obtaining-and-deploying-developers-transport-keys">Obtaining and deploying developers' transport keys</h3>
|
||||
|
||||
<p>
|
||||
As a server operator you may want to grant push access to certain developers.
|
||||
</p>
|
||||
|
||||
<h3 id="granting-push-and-pull-access">Granting push and pull access</h3>
|
||||
|
||||
<p>
|
||||
By default the Monotone server denies all access.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To grant pull access to all clients, set the following in
|
||||
<code>$HOME/.monotone/read-permissions</code>:
|
||||
|
||||
<code><pre>
|
||||
pattern "*"
|
||||
allow "*"
|
||||
</pre></code>
|
||||
</p>
|
||||
|
||||
<p>No one will not be able to push code to your server without permission being explicitly granted. To grant push access:
|
||||
<ul><li>Add the name of the user's transport key to
|
||||
<code>$HOME/.monotone/write-permissions</code>, such as
|
||||
|
||||
<code><pre>
|
||||
zzz-transport@mail.i2p
|
||||
complication-transport@mail.i2p
|
||||
</pre></code>
|
||||
with one key per line.
|
||||
</li>
|
||||
<li>Import the transport key(s) into your database. The procedure for importing transport keys is the same as for
|
||||
importing commit keys, which is described in the section <a href="#obtaining-and-deploying-developers-keys">Obtaining and deploying developers' keys</a>.
|
||||
</li></ul>
|
||||
</p>
|
||||
|
||||
<h3 id="running-monotone-in-server-mode">Running Monotone in server mode</h3>
|
||||
|
||||
<p>
|
||||
A separate database should be used for your Monotone server because monotone will lock the database while it is served to others.
|
||||
Make a copy of your development database, then start the server with:
|
||||
<ul>
|
||||
<li>$ <code><b>mtn serve --bind="127.0.0.1:8998" --db="i2p.mtn" --key "myserver-transport@mail.i2p"</b></code></li>
|
||||
</ul>
|
||||
If your key is protected with a passphrase, Monotone may request the passphrase
|
||||
when the first client connects. You can work around this by connecting making the first client connection to your server
|
||||
(or by clearing the password for your transport key).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For your server to be accessible for others over I2P, you will need to create a
|
||||
server tunnel for it. Use the "Standard" tunnel type and "Bulk" profile.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="differences-under-debian-gnulinux">Differences under Debian GNU/Linux</h3>
|
||||
|
||||
<p>
|
||||
Debian (amongst other distributions) has integrated Monotone into their
|
||||
framework of daemons/services. Although Monotone servers can still be run
|
||||
"the ordinary way" on Debian systems, doing it the "Debian way" may be more straightforward.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Permissions are granted by editing the files
|
||||
<code>/etc/monotone/read-permissions</code> and
|
||||
<code>/etc/monotone/write-permissions</code>. You'll also need to edit
|
||||
<code>/etc/default/monotone</code> to enable monotone to start at boot or to
|
||||
customize the host, port, or database location.
|
||||
</p>
|
||||
{% endblock %}
|
112
i2p2www/pages/site/get-involved/develop/release-signing-key.html
Normal file
112
i2p2www/pages/site/get-involved/develop/release-signing-key.html
Normal file
@@ -0,0 +1,112 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Release Signing Key{% endblock %}
|
||||
{% block content %}
|
||||
Releases 0.7.6 and later are signed by zzz. His public key is:
|
||||
<p>
|
||||
<pre>
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||
|
||||
mQGiBEOjTnURBADegKKrIP6pz4+n57dqo3l9QrKhIklCtIxgJkL06ZJq5fKAnMLv
|
||||
GPaGXmn5vRrbo6QzHs/lGLG+ySWFWr9SsVstNKrwk+F1yGIERutl0BqMwX1esfN2
|
||||
ugiZ3wB1yRu0PIrkm5cuDAFASFE+2lBjr1lfOrhw/dV+lLTcWx4NzkMzlwCgxgIk
|
||||
4cqQMGaVkmtuICQdYmmMicUD/AmNSVJEm2XUvaS5fYWsHJG3+oNkdNGcx5SOMUdk
|
||||
PFwcSozqvT9FeIP76OVHAshQKeftE3utOFANQ/YomXEnypmwMxLLR+GPw5pMbKlK
|
||||
6p+87aJZz+SA95E3ekmh7MmndvRd5RJDboUZy2H0FKX+FgaBlpsLl0uhT6uDuM/s
|
||||
7nb0A/9nEAgICOU5SeXtO3jKY+RQvKyE0AblK7xVaU+Sn8ly0zauOJD13rycVGhu
|
||||
vLcAUVR3FKEjxafpvZ0ZPBo7AACjSDqAoCw/s/vt9gmrhHKiqN31PhYYLhKdfKTs
|
||||
4LzWKTWKIAOwErkbYsMAXWKFT3LXsrEYvxq5j5m/6zMOwz2N7rQYenp6ICh6enop
|
||||
IDx6enpAbWFpbC5pMnA+iF8EExECAB8FAkOjTnUCGwMGCwkIBwMCBBUCCAMDFgIB
|
||||
Ah4BAheAAAoJEEFVdrqnbgvtxGsAn39SvQ3+ey87WDDG+TWArN6oU8gnAJ4zeAsA
|
||||
LUK37WZIt8OImZSxk37uQbkCDQRDo06VEAgAy2UeqsM5a+U6ZOWS9NQiILb3KbTL
|
||||
FeeAd2rn9oLSLpn5gDWycwUS0Q62JmbSMWy6m9aczpnxvwaBYXz6aCIvZmTNtaU6
|
||||
vyR/6wfJDyiUWSHtCyjpyFFYJimANd8Y8dDCimvceI/ihEDVyBX0kkgUGRAn8t3e
|
||||
unaLXqhbfiLiFw/GG1MNxUMzHt55/+9AqLOfRZg0riZvDoV79K+1sYSs8n1WeaVc
|
||||
T3wTb+Cb7fKNN7GT1MUhcXIoYYY6FGwsy5EWFsxYBRervqHtBJog2SoNUa/6BFGr
|
||||
zX+LDjK9L3xMTr3+fHIt4gPR/Lt4nnfEzL+rjClz/Fazmv38BRwPuKahFwADBQgA
|
||||
nD/AvZCnbWSB6khAVMqva5ROaD0gV0/UejCelZdYfgfHeCmrcMNQ+wCyww2NPsih
|
||||
9vB1w+AUE0pdH37k65VZN+2falUdzN+PFugJGuH2pmlVOprH2SuC5gKpGRvzUqV5
|
||||
U0nJmT2okDpW/52asUDJJLu1g//A3qBP83WGvSKUZg/ZisZA0qTiHH4QpjklopXi
|
||||
sSxR2hT8Fr9gF9WmDa09wbxE2xh/EL7gvVg/vk0gwOJcsFd67bNC+KUMOnjhOP0T
|
||||
K0/Ah4TEEs/hHNe9RsyyWlMoIUsF8AhG71ISOrJ5lLSXNe151XEb5FzZRM8sD9Zq
|
||||
0E3PjmLbdVhanYvsPnWK6YhJBBgRAgAJBQJDo06VAhsMAAoJEEFVdrqnbgvtXTwA
|
||||
njMu9ueCFbsjme7nwsz96PdazJcHAKCce17hGI25QNXDZyHohrjha6IxDg==
|
||||
=fAfi
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
</pre>
|
||||
<p>
|
||||
Releases 0.6.1.31 through 0.7.5 were signed by Complication. His public key is:
|
||||
<p>
|
||||
<pre>
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
Hello,
|
||||
|
||||
I certify that below is my new public key, issued on 2007-11-24,
|
||||
valid until 2009-11-23, and its key fingerprint is:
|
||||
|
||||
73CF 2862 87A7 E7D2 19FF DB66 FA1D FC6B 79FC CE33
|
||||
|
||||
If you have my old public key, and use it to verify this,
|
||||
you will notice that my old key expired on 2007-11-15.
|
||||
Apologies for being late with this update.
|
||||
|
||||
For people who want to copy the key directly from this message,
|
||||
but aren't reading this using an e-mail program, please remember
|
||||
to delete the "- " escape sequences from the start and end marker
|
||||
of the public key block. Otherwise it won't be recognized.
|
||||
|
||||
Complication.
|
||||
|
||||
- -----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.7 (GNU/Linux)
|
||||
|
||||
mQGiBEdH5SYRBACzCum9jIjq+/G7ckuZ/TcFmaVYeBRE6OXPQozyrmTYtoCM2qGj
|
||||
DmvMJvKYiNiQVM42KiwlnqvaNtlgnXIZ6rcyLyn+bCI5cdX1SD5Rr5tgsgcXYA6Z
|
||||
l7usiFv1bTjD67piBehF130o+LZAJnVzI7JdpbA9SBY0mUwgKXLi0DAo8wCgiKOV
|
||||
UXC8+9X9vU1Mh/GyIrD4c3kD/iQOkYH4ajNaehTHNB31K+61ltpK9tMmcWtUY30A
|
||||
Z3q38jg/nmqqup/MYCtkvOqY4X9kujKzu01eSWSNZIE+BQSSd1cSsVD17OY3TL6B
|
||||
EvE+UFxh8OnDKs3tzJ0COnT/2zbgTavbWwqovoUE0P0PSYOFm2Co0BEQiCt9Tabc
|
||||
CxU3BACRWDvq7LFMRnHT+/OOJS6M442CYzy3+tIuc3ZAmZ8QwGsh4r1kd+5P1JTN
|
||||
YJCun6MPQEllJbRyHRBby76vFkWearRgnkpAmk2l1T2SXw3lip/SdmI0GgIzPSfQ
|
||||
8WyNbMjQXyH8/3k2Y9rgrC0DttrJPYOcTFMNKPpeTR+HN3ZnibQ+Q29tcGxpY2F0
|
||||
aW9uIChodHRwOi8vY29tcGxpY2F0aW9uLmkycCkgPGNvbXBsaWNhdGlvbkBtYWls
|
||||
LmkycD6IZQQTEQIAJQUCR0flJgIbAwUJA8JnAAYLCQgHAwIEFQIIAwMWAgECHgEC
|
||||
F4AACgkQ+h38a3n8zjP1yACfWkF1zjmlD0EzLaJRnefW5OHr10MAn0fgMyElK6ee
|
||||
AoPl2mTfxQQYOophuQQNBEdH5SYQEACTcoMJQBhyrr+EunLmEGNMO7D6RSBAtEKZ
|
||||
i5ctmhr/TCXMV9qjXkWISLZ9AS6z88rKozeOOK+QPBnc2FcEf77N04O5hwSdAyPH
|
||||
Qt7+umhiNQFQpZycJ5W87Y0ryERJygA5XyU47g7CGvuuOLgKGk0dDGCNFZGSblwI
|
||||
xtSh1CsrjWp23grFiBS0xvlU2VyuYUyrBuH5ip04pxmOyeRcaelkQerFhEXSRIR7
|
||||
XFxl6JpfqWt2oWHmYbYD3RT6WHU+rpSF1Hyey+zoF2zXfRb+JD90MpBL1xIkpieQ
|
||||
Y69Cj5U5VRjEppJJowSmwgz+UyMnT2KLl45vJesPrMUaSgduHiIQo4LM5BcbbV+2
|
||||
SC5i9xqbSJ+rc19Ftt9IEUZVMLole9PJC5Ff/h1qsabyueFuMIQkbiaUiNLOKl31
|
||||
I+JAiDt0Xku2PEVCERg7Jq5AsTLB9D+zKqxbvFu+JvqSdlaCvlas2BYU5rBosszH
|
||||
TStK2XW/+poTKnjnbJl6nGC06BNQPhRFAwuXboyUC5fyiuG1HohvPmPIi6IejLUY
|
||||
G8A5nZ+7um/XpKlt2i5rdVRfN1BX3+aKHQeLmrc+EIORZUU32TrP4ceLtSDf+JOW
|
||||
8N3vwzqKIPu42Y5KB8vnXEFSOkyt36OfEd6CcPKmncDyA4wJmfC+X3eoKcj+Yrh7
|
||||
UMr0elyw4wADBg/9F7g+bTpT4wPXj5ax1i+4BdedjVlO3YBdhc4LP6MXipNU6yLl
|
||||
l63TJ8q/l8pvSkUWZXrO3a7OibM/MHp0Te/7sTmKib2/3MFwHTrtjgcZBF6wx8LD
|
||||
T3oa6O0IK8IRnRwNqeu83SxojvVY0wLz/hpUbnIrOcHMZjWLMJEfHkNBHn+1HhT5
|
||||
tk9LRGu3j1oTpGh+DpdoPF5fggNu48YJ6n7etJJGW2MXQ++33aKeQSFrx+KlMtFW
|
||||
DSzg3KKSroB8Ex9wiKKWybagaed0YoP9BW3vIAaOeDpqK92UuTFz1Bte1DYiYU1e
|
||||
Rqq1xoBVhJXE5xzGmvS4/PIZMOL/bpKcuNxAgmwOVoaYoWZuIgePUaBbNvNg84HE
|
||||
RBjFMyfpzRCdPlWPZ18KcLUki3T58KzXEZ7WS5hC5lezwC6ET+wJusAt0A+Ik146
|
||||
igayKfVnvhedQdqufWhQWNr+hDc5Fb/az8nTyNOflAhD3yHldjxgkCOV8wjqyS+4
|
||||
iO33P5wW7o2QkZNWq8pyjsKRRJCtZ/PJ7FRGkUOjoC/gwhnGvBi0KoDcyBmfnPXp
|
||||
3MAgrzk9LwiA7PlS7PyhyMx5mYpa90xlXzszweCIXzGfbm6ciCUAM3G3Qb+qa2dW
|
||||
0u1X5L6bVtHVpYnr+5JOxCS4qwQvoK0QnHu6ezu4+rFutUJN35z6rFquejiITwQY
|
||||
EQIADwUCR0flJgIbDAUJA8JnAAAKCRD6HfxrefzOMzSZAJ9PmYNkW4Ia1qPqowg9
|
||||
z4Ja+hJ3dgCeL3mqvOEHG7AcUQrSlc6xlC1vbNY=
|
||||
=rGxK
|
||||
- -----END PGP PUBLIC KEY BLOCK-----
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.7 (GNU/Linux)
|
||||
|
||||
iD8DBQFHR/zm4tLxqYRsGn0RAtCfAJ9rz+tsyEbeUAHcogdzgSPfuiWOAwCfWaVn
|
||||
Aiib6V5wOPbYTy13ADmxhfE=
|
||||
=mPFq
|
||||
-----END PGP SIGNATURE-----
|
||||
</pre>
|
||||
{% endblock %}
|
172
i2p2www/pages/site/get-involved/develop/signed-keys.html
Normal file
172
i2p2www/pages/site/get-involved/develop/signed-keys.html
Normal file
@@ -0,0 +1,172 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Signed Developer Keys{% endblock %}
|
||||
{% block content %}
|
||||
<p>Keys for zzz, Complication and welterde are provided clearsigned. The key for jrandom must be
|
||||
verified differently, since he's away, and only left a binary detached
|
||||
signature for his key.
|
||||
<ol>
|
||||
<li><a href="signedkeys#monotone-keys-for-zzz">Monotone keys for zzz</a></li>
|
||||
<li><a href="#monotone-keys-for-welterde">Monotone keys for welterde</a></li>
|
||||
<li><a href="#monotone-keys-for-complication">Monotone keys for Complication</a></li>
|
||||
<li><a href="#monotone-keys-for-jrandom">Monotone keys for jrandom</a></li>
|
||||
<li><a href="#other-developer-keys">Others</a></li>
|
||||
</ol>
|
||||
<h3 id="monotone-keys-for-zzz">Monotone keys for zzz</h3>
|
||||
<p>
|
||||
<u>Tip:</u> To find zzz's GPG key, on his eepsite locate the key `0xA76E0BED`, with
|
||||
the name `zzz@mail.i2p` and the fingerprint `4456 EBBE C805 63FE 57E6 B310 4155
|
||||
76BA A76E 0BED`.
|
||||
</p>
|
||||
|
||||
<code><pre>
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
[pubkey zzz-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDa2uZI1BobxS4TapMqmf4Ws3nyL3GYgkfb
|
||||
MEawyWl0E1pfHJ4dLZkdxQdcLyCsN9OCY4jRNzmoYnDa2HtBLINq15BJmGJ0cfIDLXIB2GBO
|
||||
ViAPRkEKQTVoc7IpcjtPPjtSBVganD/AW78m9cgUYag86Lbm2ynUaXWpw9i4gpLdLQIDAQAB
|
||||
[end]
|
||||
[pubkey zzz@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtgaWY0Wc1c8pFGIxASZx78pHpHZKQV8z6
|
||||
IRQkgy65gQMjpLquaQpy3Xk8rkpnfA+6h3TS6bjplsEhlaQoxvpGxacRYOt+y1HC/n20O3RI
|
||||
E1A/e3sGKHGDEQW+3ItF4WSNfeQ18DzLeun32vFknq2k9im6Ts4tiYfKs8CZ5KW0/QIDAQAB
|
||||
[end]
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||
|
||||
iD8DBQFHnN51QVV2uqduC+0RAv8NAJ9B/7pWKLvqVI6HnAifs9oedsdWSACfYS1E
|
||||
sFwJiw4A+Sr9wQrtoO4X4ow=
|
||||
=SVDV
|
||||
-----END PGP SIGNATURE-----
|
||||
</pre></code>
|
||||
|
||||
|
||||
<h3 id="monotone-keys-for-welterde">Monotone keys for welterde</h3>
|
||||
|
||||
<p>
|
||||
<b>Tip:</b> To find welterde's GPG key, on public keyservers locate the key
|
||||
`0x62E011A1`, with the name `welterde@arcor.de` and the fingerprint `6720 FD81
|
||||
3872 6DFC 6016 64D1 EBBC 0374 62E0 11A1`.
|
||||
</p>
|
||||
|
||||
<code><pre>
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
[pubkey dev@welterde.de]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRnJUBY0d4310UpZYGUlsWgxWHoD8bsKtT
|
||||
vGw83vwUQRtM2xPKxCHvEntg9Dgiqr5RurOKHK7Eak6WgxCXQFfC9ALr4SoC5abI4ZFvM/CA
|
||||
WRb547UIPTchSnuDUn/TSgDGqtGvMFS9t6OUp9Z/7QzIjLQhhBCqj4/hZhxUJ61XBwIDAQAB
|
||||
[end]
|
||||
[pubkey transport@welterde.de]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCujyq15a7t0Gki/sKoZQbv7CHJWbT3YB5O
|
||||
DQyU3zfqXnHNj82tz6wVsvjZmKUYZvax7wLLRErMGX3PTGxb23I5iypLmYtWt+lbkxMZdcGT
|
||||
GEXBU8JnAfhnSIdLzBJ2soe55vBQp0Tx1Ta+7/CNYwVPUxr5l6J/2gcGFJg3cAD99wIDAQAB
|
||||
[end]
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.7 (Darwin)
|
||||
|
||||
iD8DBQFHojoC67wDdGLgEaERAsALAKCwNlkNFaTyC4pV4rsinXQ8hu7UvgCbBeeV
|
||||
Ni/uLlSdl3Kz7KfVipwnjm4=
|
||||
=oE5t
|
||||
-----END PGP SIGNATURE-----
|
||||
</pre></code>
|
||||
|
||||
|
||||
<h3 id="monotone-keys-for-complication">Monotone keys for Complication</h3>
|
||||
|
||||
<p>
|
||||
<b>Tip:</b> To find Complication's GPG key, on his eepsite locate the key
|
||||
`0x79FCCE33`, with the name `complication@mail.i2p` and the fingerprint `73CF
|
||||
2862 87A7 E7D2 19FF DB66 FA1D FC6B 79FC CE33`.
|
||||
</p>
|
||||
|
||||
<code><pre>
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
|
||||
I confirm that my Monotone commit and transport keys are:
|
||||
|
||||
[pubkey complication@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCx1F6nwBUCIiCPVsogy/h/+2d8X3uMcEdn
|
||||
RIN+gxO+0pK+yrGZiFwi7TG/K3PjDfJWuxsPRKLeb9Q4NmfxrAePelGig9llalrDnRkIcRFu
|
||||
cnNUOJo9C0MjvzYR9D6bIS3+udPdl6ou94JX+ueo2jLXI1lGgtdWDWTetJx9I++EvwIDAQAB
|
||||
[end]
|
||||
[pubkey complication-transport@mail.i2p]
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDP55FmBUIZjamtDinVDrLmS9uU40KoNfLd
|
||||
iB+t/iEgEWHDPQxlwugh/aBQwsXKGGJMJSNURKwwjfrcr5y3oz9jpRjtLVqoZMBVLgp28WGA
|
||||
9KbzXi4/dYhdyNmr4gHc17mDSlhCfk/L5QxifSYwSaeeFPsoAAyBBB221Z3197bmVQIDAQAB
|
||||
[end]
|
||||
|
||||
Complication.
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||
|
||||
iD8DBQFHpdQT+h38a3n8zjMRAtW8AJ0fmuw1hrZePDzOx61xSh5cK27ikQCeJn+U
|
||||
g8X/m/JAsedzOFJDN0tlTig=
|
||||
=LM+C
|
||||
-----END PGP SIGNATURE-----
|
||||
</pre></code>
|
||||
|
||||
<h3 id="monotone-keys-for-jrandom">Monotone keys for jrandom</h3>
|
||||
|
||||
<p>
|
||||
<b>Tip:</b> To find jrandom's GPG key for Syndie releases, on public keyservers locate
|
||||
the key `0x393F2DF9`, with the name `syndie-dist-key@i2p.net` and the
|
||||
fingerprint `AE89 D080 0E85 72F0 B777 B2ED C2FA 68C0 393F 2DF9`.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Jrandom had to leave unexpectedly in the end of 2007. His commit key was
|
||||
deployed in the Syndie Monotone repository, in a file named `mtn-committers`.
|
||||
That file also had a GPG signature, `mtn-committers.sig`, but it was a binary
|
||||
detached signature. I am going to supply both files in GPG ASCII-armoured form
|
||||
below.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
First, the file `mtn-committers` containing jrandom's Monotone key. Save as
|
||||
`mtn-committers.asc` and unpack it using `gpg --output mtn-committers --dearmor
|
||||
mtn-committers.asc`:
|
||||
</p>
|
||||
|
||||
<code><pre>
|
||||
-----BEGIN PGP ARMORED FILE-----
|
||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||
Comment: Use "gpg --dearmor" for unpacking
|
||||
|
||||
W3B1YmtleSBqcmFuZG9tQGkycC5uZXRdCk1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFV
|
||||
QUE0R05BRENCaVFLQmdRRE9MdzA1a1pidXg1S0xkcHJjR0hlQ1RseXQrR2poR1ho
|
||||
NwpBdXBzK1FNRC9GRWJJVkVGUEdJQkcyanUzMDY5VEtJSHBYcjVIRWU1bWFCZ3RJ
|
||||
SkJNOU5QVnZNTkZDZ09TcmVnbW5WSXB4U2cKSGQrV2l1MUl5emhkMFN4QzVwQ0hk
|
||||
bndTanYwNTFmY3RZY3AxcnM1T2NVb2pVZHZGN3RxOTF6QUFZK2tMeHBYNnpRSURB
|
||||
UUFCCltlbmRdCg==
|
||||
=035X
|
||||
-----END PGP ARMORED FILE-----
|
||||
</pre></code>
|
||||
|
||||
<p>
|
||||
Now the file `mtn-committers.sig`, containing the GPG signature. Save as
|
||||
`mtn-committers.sig.asc` and unpack it using `gpg --output mtn-committers.sig
|
||||
--dearmor mtn-committers.sig.asc`. Use it to verify the above supplied
|
||||
`mtn-committers` file:
|
||||
</p>
|
||||
|
||||
<code><pre>
|
||||
-----BEGIN PGP ARMORED FILE-----
|
||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||
Comment: Use "gpg --dearmor" for unpacking
|
||||
|
||||
iD8DBQBFLssNwvpowDk/LfkRAtytAKCOiaDIveC3sri0lrdvwxt/TQciigCfXgyC
|
||||
ZY3qq910P/TX94qoJGePbuc=
|
||||
=8NHt
|
||||
-----END PGP ARMORED FILE-----
|
||||
</pre></code>
|
||||
|
||||
<h3 id="other-developer-keys">Others</h3>
|
||||
Some of the developers have included their Monotone keys in their <a href="license-agreements">signed license agreement</a>.
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
95
i2p2www/pages/site/get-involved/donate.html
Normal file
95
i2p2www/pages/site/get-involved/donate.html
Normal file
@@ -0,0 +1,95 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Donate{% endblock %}
|
||||
{% block content %}<p>Thank you for your interest in contributing to I2P!
|
||||
The details of how you
|
||||
can make your contribution are provided below.</p>
|
||||
|
||||
|
||||
<h2><a href="http://www.paypal.com/">PayPal</a></h2>
|
||||
<br />
|
||||
You can donate direct via PayPal to the account "echelon@i2pmail.org".<br />
|
||||
<br />
|
||||
<table>
|
||||
<tr>
|
||||
<td>One time donation:</td>
|
||||
<td>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><fieldset style="border:none;">
|
||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
||||
<input type="hidden" name="hosted_button_id" value="3031758" />
|
||||
<input type="hidden" name="no_note" value="0" />
|
||||
<input type="hidden" name="no_shipping" value="1" />
|
||||
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" style="border:0;" name="submit" alt="" />
|
||||
<img alt="" style="border:0;width:1;height:1" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" /></fieldset>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Donate 10 €/month for 12 months: </td>
|
||||
<td>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<fieldset style="border:none;">
|
||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
||||
<input type="hidden" name="hosted_button_id" value="3031934" />
|
||||
<input type="hidden" name="no_note" value="0" />
|
||||
<input type="hidden" name="no_shipping" value="1" />
|
||||
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif" style="border:0;" name="submit" alt="I2P donation" />
|
||||
<img alt="" style="border:0;width:1;height:1" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" /></fieldset>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donate 20 €/month for 12 months: </td>
|
||||
<td>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<fieldset style="border:none;">
|
||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
||||
<input type="hidden" name="hosted_button_id" value="KALQ2V9SQF348" />
|
||||
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif" style="border:0;" name="submit" alt="I2P donation" />
|
||||
<img alt="" style="border:0;width:1;height:1" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" /></fieldset>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donate 30 €/month for 12 months: </td>
|
||||
<td>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" >
|
||||
<fieldset style="border:none;">
|
||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
||||
<input type="hidden" name="hosted_button_id" value="QSU89XWKB7N3U" />
|
||||
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif" style="border:0;" name="submit" alt="I2P donation" />
|
||||
<img alt="" style="border:0;width:1;height:1" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" /></fieldset>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Donate 50 €/month for 12 months: </td>
|
||||
<td>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<fieldset style="border:none;">
|
||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
||||
<input type="hidden" name="hosted_button_id" value="8ENENJMVN6TL8" />
|
||||
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif" style="border:0;" name="submit" alt="I2P donation" />
|
||||
<img alt="" style="border:0;width:1;height:1" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" /></fieldset>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br />
|
||||
<h2><a href="http://www.flattr.com/">Flattr</a></h2>
|
||||
<a href="http://flattr.com/thing/13523/Invisible-Internet-Project-I2P">
|
||||
<img src="http://api.flattr.com/button/button-static-50x60.png" title="Flattr this" style="border:0;" alt="Flattr this" /></a>
|
||||
<br />
|
||||
<br />
|
||||
<h2><a href="http://www.bitcoin.org/">Bitcoin</a></h2>
|
||||
<p>As of December 2010, eche|on has been running a <a href="http://www.bitcoin.org">Bitcoin</a> account for the I2P project.
|
||||
If you'd like to donate using Bitcoin, just transfer your desired amount of coins to the account
|
||||
<b>1HkJCceXf7of1sTNRVJbXiZHfDTLL71Siy</b> and leave eche|on a note if you'd like your donation to be mentioned on the I2P webpage.<br />
|
||||
</p>
|
||||
<p>If you want to keep more or less anonymous, the option to send money via mail is also available. But it is less secure
|
||||
as the envelope can be lost on the way to us. </p>
|
||||
<p>If you'd like to donate via snail mail, send an email to <a href="mailto:echelon@i2pmail.org?subject=information about snailmail donation">echelon@i2pmail.org</a>
|
||||
and you'll receive an email with instructions detailing how to proceed.</p>
|
||||
|
||||
<p>In the meantime, feel free to take a look at the generous donations that have been given in support of the I2P Project at the <a href="{{ site_url('volunteer/halloffame') }}">hall of fame</a>.</p>
|
||||
{% endblock %}
|
130
i2p2www/pages/site/get-involved/guides/dev-guidelines.html
Normal file
130
i2p2www/pages/site/get-involved/guides/dev-guidelines.html
Normal file
@@ -0,0 +1,130 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Developer Guidelines and Coding Style{% endblock %}
|
||||
{% block content %}
|
||||
<p>
|
||||
Read the <a href="{{ site_url('get-involved/guides/newdevelopers') }}">new developers guide</a> first.
|
||||
</p>
|
||||
|
||||
<h2>Basic Guidelines and Coding Style</h2>
|
||||
|
||||
<p>
|
||||
Most of the following should be common sense for anybody who has worked on open source or in a commercial
|
||||
programming envrionment.
|
||||
The following applies mostly to the main development branch i2p.i2p.
|
||||
Guidelines for other branches, plugins, and external apps may be substantially different;
|
||||
check with the appropriate developer for guidance.
|
||||
</p>
|
||||
|
||||
<h3>Community</h3>
|
||||
<ul>
|
||||
<li>
|
||||
Please don't just "write code". If you can, participate in other development activities, including:
|
||||
development discussions and support on IRC, zzz.i2p, and forum.i2p; testing;
|
||||
bug reporting and responses; documentation; code reviews; etc.
|
||||
</li><li>
|
||||
Active devs should be available periodically on IRC #i2p-dev.
|
||||
Be aware of the current release cycle.
|
||||
Adhere to release milestones such as feature freeze, tag freeze, and
|
||||
the checkin deadline for a release.
|
||||
</li></ul>
|
||||
|
||||
<h3>Monotone</h3>
|
||||
<ul>
|
||||
<li>
|
||||
Have a basic understanding of distributed source control systems, even if you haven't
|
||||
used monotone before. Ask for help if you need it.
|
||||
Once pushed, checkins are forever, there is no undo. Please be careful.
|
||||
If you have not used monotone before, start with baby steps.
|
||||
Check in some small changes and see how it goes.
|
||||
</li><li>
|
||||
Test your changes before checking them in.
|
||||
If you prefer the checkin-before-test development model,
|
||||
use your own development branch (e.g. i2p.i2p.yourname.test)
|
||||
and propagate back to i2p.i2p once it is working well.
|
||||
Do not break the build. Do not cause regressions.
|
||||
In case you do (it happens), please do not vanish for a long period after
|
||||
you push your change.
|
||||
</li><li>
|
||||
If your change is non-trivial, or you want people to test it and need good test reports
|
||||
to know whether your change was tested or not, add a checkin comment to history.txt
|
||||
and increment the build revision in RouterVersion.java.
|
||||
</li><li>
|
||||
Ensure that you have the latest monotonerc file in _MTN.
|
||||
Do not check in on top of untrusted revisions.
|
||||
</li><li>
|
||||
Ensure that you pull the latest revision before you check in.
|
||||
If you inadvertently diverge, merge and push as soon as possible.
|
||||
Don't routinely make others merge for you.
|
||||
Yes, we know that monotone says you should push and then merge,
|
||||
but in our experience, in-workspace merge works just as well as in-database merge,
|
||||
without creating a merge revision.
|
||||
</li><li>
|
||||
Do not check in major changes into the main i2p.i2p branch late in the release cycle.
|
||||
If a project will take you more than a couple days, create your own branch in monotone
|
||||
and do the development there so you do not block releases.
|
||||
</li></ul>
|
||||
|
||||
<h3>Coding Style</h3>
|
||||
<ul>
|
||||
<li>
|
||||
Coding style throughout most of the code is 4-spaces for indentation. Do not use tabs.
|
||||
Do not reformat code. If your IDE or editor wants to reformat everything, get control of it.
|
||||
Yes, we know 4 spaces is a pain, but perhaps you can configure your editor appropriately.
|
||||
In some places, the coding style is different.
|
||||
Use common sense. Emulate the style in the file you are modifying.
|
||||
</li><li>
|
||||
New classes and methods require at least brief javadocs. Add @since release-number.
|
||||
</li><li>
|
||||
Classes in core/ (i2p.jar) and portions of i2ptunnel are part of our official API.
|
||||
There are several out-of-tree plugins and other applications that rely on this API.
|
||||
Be careful not to make any changes that break compatibility.
|
||||
Don't add methods to the API unless they are of general utility.
|
||||
Javadocs for API methods should be clear and complete.
|
||||
If you add or change the API, also update the documentation on the website (i2p.www branch).
|
||||
</li><li>
|
||||
Tag strings for translation where appropriate.
|
||||
Don't change existing tagged strings unless really necessary, as it will break existing translations.
|
||||
Do not add or change tagged strings after the "tag freeze" in the release cycle so that
|
||||
translators have a chance to update before the release.
|
||||
</li><li>
|
||||
Use generics and concurrent classes where possible. I2P is a highly multi-threaded application.
|
||||
</li><li>
|
||||
We require Java 6 to build but only Java 5 to run I2P.
|
||||
Do not use Java 6 classes or methods without handling the class not found exceptions
|
||||
and providing alternate Java 5 code. See classes in net.i2p.util for examples.
|
||||
</li><li>
|
||||
Explicitly convert between primitive types and classes;
|
||||
don't rely on autoboxing/unboxing.
|
||||
</li></ul>
|
||||
|
||||
<h3>Licenses</h3>
|
||||
<ul>
|
||||
<li>
|
||||
Only check in code that you wrote yourself.
|
||||
Before checking in any code or library jars from other sources,
|
||||
justify why it is necessary,
|
||||
verify the license is compatible,
|
||||
and obtain approval from the lead developer.
|
||||
</li><li>
|
||||
For any images checked in from external sources,
|
||||
it is your responsibility to first verify the license is compatible.
|
||||
Include the license and source information in the checkin comment.
|
||||
</li></ul>
|
||||
|
||||
<h3>Bugs</h3>
|
||||
<ul>
|
||||
<li>
|
||||
Managing Trac tickets is everybody's job, please help.
|
||||
Monitor trac.i2p2.i2p for tickets you have been assigned or can help with.
|
||||
Asssign, categorize, comment on, fix, or close tickets if you can.
|
||||
</li><li>
|
||||
Close a ticket when you think you've fixed it.
|
||||
We don't have a test department to verify and close tickets.
|
||||
If you arent sure you fixed it, close it and add a note saying
|
||||
"I think I fixed it, please test and reopen if it's still broken".
|
||||
Add a comment with the dev build number or revision and set
|
||||
the milestone to the next release.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
{% endblock %}
|
51
i2p2www/pages/site/get-involved/guides/ides.html
Normal file
51
i2p2www/pages/site/get-involved/guides/ides.html
Normal file
@@ -0,0 +1,51 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Using an IDE with I2P{% endblock %}
|
||||
{% block content %}
|
||||
<p>
|
||||
The main I2P development branch (i2p.i2p) has been set up to enable developers to easily set up two of the commonly-used IDEs for Java development: Eclipse and NetBeans.
|
||||
</p>
|
||||
|
||||
<h1>Eclipse</h1>
|
||||
|
||||
<p>
|
||||
The main I2P development branch (and therefore any branches from it) contain .project and .classpath Eclipse files, to enable the branch to be easily set up in Eclipse.
|
||||
</p>
|
||||
|
||||
<ol>
|
||||
|
||||
<li>
|
||||
Check out the I2P branch into some directory (e.g. "$HOME/dev/i2p.i2p").
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Open Eclipse and create a new Workspace, based in the directory that the I2P branch was checked out to.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Select "File - Import..." and then under "General" select "Existing Projects into Workspace".
|
||||
</li>
|
||||
|
||||
<li>
|
||||
For "Select root directory:" choose the directory that the I2P branch was checked out to.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
If necessary, click "Refresh" to refresh the list of projects.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Select every project in the list, and click "Finish".
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Done! Your workspace should now contain all projects within the I2P branch, and their build dependencies should be correctly set up.
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
<h1>NetBeans</h1>
|
||||
|
||||
<p>
|
||||
TODO: fill this in.
|
||||
</p>
|
||||
{% endblock %}
|
186
i2p2www/pages/site/get-involved/guides/new-developers.html
Normal file
186
i2p2www/pages/site/get-involved/guides/new-developers.html
Normal file
@@ -0,0 +1,186 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}New Developer's Guide{% endblock %}
|
||||
{% block content %}
|
||||
<p>
|
||||
So you want to start work on I2P? Great!
|
||||
Here's a quick guide to getting started
|
||||
on contributing to the website or the software, doing development or creating translations.
|
||||
</p>
|
||||
<p>
|
||||
Not quite ready for coding?
|
||||
Try <a href="{{ site_url('get-involved') }}">getting involved</a> first.
|
||||
</p>
|
||||
|
||||
<div id="TOC">
|
||||
<ol>
|
||||
<li><a href="#basic-study">Basic study</a></li>
|
||||
<li><a href="#getting-the-i2p-code">Getting the I2P code</a></li>
|
||||
<li><a href="#building-i2p">Building I2P</a></li>
|
||||
<li><a href="#development-ideas">Development ideas</a></li>
|
||||
<li><a href="#making-the-results-available">Making the results available</a></li>
|
||||
<li><a href="#get-to-know-us">Get to know us!</a></li>
|
||||
<li><a href="#translations">Translations</a></li>
|
||||
<li><a href="#tools">Tools</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<h2 id="basic-study">Basic 'study'</h2>
|
||||
|
||||
<p>
|
||||
Basic development on the I2P router or the embedded applications uses Java as the main development language.
|
||||
If you don't have experience with Java, you can always have a look at <a href="http://www.mindview.net/Books/TIJ/">Thinking in Java</a>.
|
||||
</p>
|
||||
<p>
|
||||
Study the <a href="{{ site_url('docs/how/intro') }}">how intro</a>,
|
||||
the <a href="{{ site_url('docs') }}">other "how" documents</a>,
|
||||
the <a href="{{ site_url('docs/how/techintro') }}">tech intro</a>,
|
||||
and associated documents.
|
||||
These will give you a good overview of how I2P is structured and what different things it does.
|
||||
</p>
|
||||
|
||||
<h2 id="getting-the-i2p-code">Getting the I2P code</h2>
|
||||
|
||||
<p>
|
||||
For development on the i2p router or the embedded applications,
|
||||
get the monotone source repository installed - short instructions:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Install <a href="http://www.monotone.ca/">monotone</a>.
|
||||
Monotone is a version control system.
|
||||
We use it because it allows us to keep track of who does what changes to the source code (and for a lot of complicated things, but 'keeping track of changes' is the basic idea).
|
||||
</li>
|
||||
<li>Skim over the <a href="http://monotone.ca/docs/Tutorial.html">monotone tutorial</a>, to make sure you understand the concepts.</li>
|
||||
<li>
|
||||
<p>
|
||||
If you want to remain anonymous, you need to do an additional step, to set up a connection to a monotone server over I2P:
|
||||
</p>
|
||||
<p>
|
||||
Enable the <a href="{{ site_url('docs/api/i2ptunnel') }}">i2ptunnel</a> client tunnel on port 8998 pointing to mtn.i2p2.i2p.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
Pick a directory where you want to put all your I2P files, and create a monotone database: <code><b>mtn -d i2p.mtn db init</b></code>
|
||||
</li>
|
||||
<li>Define the trust list by creating <code>~/.monotone/monotonerc</code> (or <code>_MTN/monotonerc</code> in the i2p.i2p workspace) with the following contents:
|
||||
{% include "include/monotonerc.html" %}
|
||||
</li>
|
||||
<li>Copy and paste the <a href="developerskeys">developer's commit keys</a> into a new file (e.g. <code>keys.txt</code>) in the same directory
|
||||
that <code>i2p.mtn</code> is in. Import the keys into your database with <br><code><pre> mtn -d i2p.mtn read < keys.txt</pre></code>
|
||||
<li>
|
||||
Pull the I2P sources to your machine. This may take a long time, especially if you are doing this over I2P!
|
||||
<ul>
|
||||
<li>Anonymously: <code><b>mtn -d i2p.mtn pull 127.0.0.1:8998 i2p.i2p -k""</b></code></li>
|
||||
<li>
|
||||
<p>
|
||||
Non-anonymously: <code><b>mtn -d i2p.mtn pull mtn.i2p2.de i2p.i2p -k"" </b></code>
|
||||
</p>
|
||||
<p>
|
||||
Alternatively, instead of 'mtn.i2p2.de', you can also download from mtn.i2p-projekt.de.
|
||||
</p>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
All the sources are now present on your machine, in the database file. To make them available in a directory, you need to check them out: <code><b>mtn -d i2p.mtn co --branch=i2p.i2p</b></code>
|
||||
</p>
|
||||
<p>
|
||||
The above command creates a directory i2p.i2p, which contains all of the I2P sources.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>Remarks</h3>
|
||||
<p>
|
||||
To download the website files instead of the I2P source files, use 'i2p.www' instead of 'i2p.i2p'.
|
||||
</p>
|
||||
<p>
|
||||
The initial pull may take several hours using the tunnel.
|
||||
If it fails after a partial pull, simply rerun it, it will start where it left off.
|
||||
If you are in a hurry, use the non-anonymous access.
|
||||
</p>
|
||||
<p>
|
||||
A full list of branches, including i2p.i2p and i2p.www can be found on <a href="http://stats.i2p/cgi-bin/viewmtn/">viewmtn</a>.
|
||||
</p>
|
||||
<p>
|
||||
A long explanation about using monotone is available on the <a href="monotone">monotone page</a>.
|
||||
</p>
|
||||
|
||||
<h2 id="building-i2p">Building I2P</h2>
|
||||
|
||||
<p>
|
||||
To compile the code, you need the Sun Java Development Kit 6 or higher, or equivalent JDK
|
||||
(<a href="http://java.sun.com/javase/downloads/index.jsp">Sun JDK 6</a> strongly recommended) and
|
||||
<a href="http://ant.apache.org/">Apache ant</a>
|
||||
version 1.7.0 or higher.
|
||||
If you go are working on the main I2P code, you can go into the i2p.i2p directory and run 'ant' to see the build options.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To build or work on console translations, you need
|
||||
the xgettext, msgfmt, and msgmerge tools from the
|
||||
<a href="http://www.gnu.org/software/gettext/">GNU gettext package</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For development on new applications,
|
||||
see the <a href="{{ site_url('develop/applications') }}">application development guide</a>.
|
||||
</p>
|
||||
|
||||
<h2 id="development-ideas">Development ideas</h2>
|
||||
<p>
|
||||
See <a href="http://zzz.i2p/forums/3">zzz's TODO lists</a>,
|
||||
<a href="{{ site_url('get-involved/todo') }}">this website's TODO list</a> or
|
||||
<a href="http://trac.i2p2.de/report/1">Trac</a>
|
||||
for ideas.
|
||||
</p>
|
||||
|
||||
<h2 id="making-the-results-available">Making the results available</h2>
|
||||
|
||||
<p>
|
||||
See the bottom of <a href="{{ site_url('develop/licenses') }}#commit">licenses.html</a> for
|
||||
commit privilege requirements. You need these to put code into i2p.i2p (not required for the website!).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Short version of how to generate and use keys if you plan to commit:
|
||||
<ul>
|
||||
<li>mtn genkey yourname-transport@mail.i2p <i>(use an empty passphrase)</i>
|
||||
<li>mtn genkey yourname@mail.i2p <i>(enter a passphrase)</i>
|
||||
<li>mtn pubkey yourname-transport@mail.i2p <i>(<a href="mailto:mtn@welterde.de">send</a> this to a mtn repo operator to get push privileges)</i>
|
||||
<li>mtn pubkey yourname@mail.i2p <i>(send this to <a href="mailto:zzz@mail.i2p">a release manager</a> to get commit privileges - not required for website)</i>
|
||||
<li>mtn ci -k yourname@mail.i2p <i>(check in with this key)</i>
|
||||
<li>mtn sync -k yourname-transport@mail.i2p <i>(push with this key)</i>
|
||||
</ul>
|
||||
Long version: see the <a href="monotone">monotone page</a>.
|
||||
</p>
|
||||
|
||||
<h2 id="get-to-know-us">Get to know us!</h2>
|
||||
<p>
|
||||
The developers hang around on IRC. They can be reached on the Freenode network, OFTC, and on the I2P internal networks. The usual place to look is #i2p-dev. Join the channel and say hi!
|
||||
We also have <a href="dev-guidelines">additional guidelines for regular developers</a>.
|
||||
</p>
|
||||
|
||||
<h2 id="translations">Translations</h2>
|
||||
<p>
|
||||
Website and router console translators: See the <a href="{{ site_url('get-involved/guides/newtranslators') }}">New Translators Page</a>
|
||||
for next steps.
|
||||
</p>
|
||||
|
||||
<h2 id="tools">Tools</h2>
|
||||
<p>
|
||||
I2P is open source software that is mostly developed using open sourced
|
||||
toolkits. The I2P project recently acquired a license for the YourKit Java
|
||||
Profiler. Open source projects are eligible to receive a free license provided
|
||||
that YourKit is referenced on the project web site. Please get in touch if you
|
||||
are interested in profiling the I2P codebase.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
YourKit is kindly supporting open source projects with its full-featured Java Profiler.
|
||||
YourKit, LLC is the creator of innovative and intelligent tools for profiling
|
||||
Java and .NET applications. Take a look at YourKit's leading software products:
|
||||
<a href="http://www.yourkit.com/java/profiler/index.jsp">YourKit Java Profiler</a> and
|
||||
<a href="http://www.yourkit.com/.net/profiler/index.jsp">YourKit .NET Profiler</a>.
|
||||
</p>
|
||||
{% endblock %}
|
178
i2p2www/pages/site/get-involved/guides/new-translators.html
Normal file
178
i2p2www/pages/site/get-involved/guides/new-translators.html
Normal file
@@ -0,0 +1,178 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}New Translator's Guide{% endblock %}
|
||||
{% block content %}
|
||||
Here's a very quick guide to getting started.
|
||||
|
||||
<h2>How to Translate the Website</h2>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
Preparation
|
||||
<ol>
|
||||
<li>
|
||||
Come to #i2p-dev on irc and talk to people.
|
||||
Claim the language -
|
||||
To make sure other coworkers don't bump onto the files you are working on,
|
||||
please update the translation status on <a href="http://ugha.i2p/i2pTranslation">this wiki page</a>.</li>
|
||||
<li>
|
||||
Follow the <a href="{{ site_url('get-involved/guides/newdevelopers') }}">new developer's guide</a>,
|
||||
Including the installation of monotone,
|
||||
checking out i2p.www branch, and generate your own monotone keys.
|
||||
It is not required that you sign a dev agreement.</li>
|
||||
</ol>
|
||||
|
||||
<li>
|
||||
Create files:
|
||||
If the file for your language does not exist yet, copy another language file to a new file <code>foo_xx.bar</code> for your language.
|
||||
Then '<code>mtn add</code>' the file.
|
||||
Also add a <code>_layout_xx.html</code> for your language xx.
|
||||
Add a flag image file for the menu (copy from the router).</li>
|
||||
|
||||
<li>
|
||||
Edit files:
|
||||
Edit <code>_layout_xx.html</code>, <code>_menu.html</code>, and other files with any text editor.
|
||||
Be sure not to use an editor in HTML mode that reformats everything.</li>
|
||||
|
||||
<li>
|
||||
Check in:
|
||||
<code>mtn pull</code>, <code>mtn update</code>. Then check in by "<code>mtn ci -k yourname@mail.i2p file1 file2 ...</code>"
|
||||
This collects the diff info of your changed file into your local repo. Then "<code>mtn sync mtn.i2p2.de -k yourname-transport@mail.i2p i2p.i2p</code>".
|
||||
This synchronizes your local repo with the repo on the target machine.</li>
|
||||
|
||||
<li>
|
||||
Repeat. Check in often. Don't wait until it is perfect.</li>
|
||||
|
||||
|
||||
|
||||
</ol>
|
||||
|
||||
<h2>How to Translate the Router Console</h2>
|
||||
|
||||
<p>The easiest way by far to translate the router console is to sign up for an account at
|
||||
<a href="https://www.transifex.com/projects/p/I2P/">Transifex</a> and request to join a translation team.
|
||||
Alternatively it can be done "the old way" as outlined below.</p>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
Preparation
|
||||
<ol>
|
||||
<li>
|
||||
Come to #i2p-dev on irc and talk to people.
|
||||
Claim the language -
|
||||
To make sure other coworkers don't bump onto the files you are working on,
|
||||
please update the translation status on <a href="http://ugha.i2p/i2pTranslation">this wiki page</a>.</li>
|
||||
<li>
|
||||
Follow the <a href="{{ site_url('get-involved/guides/newdevelopers') }}">new developer's guide</a>,
|
||||
Including the installation of monotone and the gettext tools,
|
||||
checking out i2p.i2p branch, and generate your own monotone keys.</li>
|
||||
<li>
|
||||
Generate your own gpg key and sign the dev agreement.</li>
|
||||
</ol></li>
|
||||
|
||||
<li>
|
||||
Before starting a console translation, better help translate some i2p webpages first.
|
||||
At least an i2p homepage in your language would be great. This will also help you learn monotone.</li>
|
||||
|
||||
<li>
|
||||
What to translate:
|
||||
There are about 15 files in the i2p.i2p branch that needs translation:
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>installer/resources/readme/readme_xx.html</code></li>
|
||||
<li>
|
||||
<code>installer/resources/initialNews/initialNews_xx.xml</code></li>
|
||||
<li>
|
||||
<code>apps/routerconsole/locale/messages_xx.po</code></li>
|
||||
<li>
|
||||
<code>installer/resources/proxy/*_xx.ht</code> (about 9 files)</li>
|
||||
<li>
|
||||
<code>apps/routerconsole/jsp/help_xx.jsp</code></li>
|
||||
<li>
|
||||
<code>installer/resources/eepsite.help/help/index_xx.html</code></li>
|
||||
<li>
|
||||
<code>apps/i2ptunnel/locale/messages_xx.po</code></li>
|
||||
<li>
|
||||
<code>apps/i2psnark/locale/messages_xx.po</code></li>
|
||||
<li>
|
||||
<code>apps/susidns/locale/messages_xx.po</code></li>
|
||||
</ul>
|
||||
|
||||
Where xx is your language code like fr/de/ch/zh/...
|
||||
|
||||
There may be or may not be files with your lang code. If not, you can create your own. by copying and renaming other language files you know with your own lang code.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Create files:
|
||||
If the file for your language does not exist yet, copy another language file to a new file foo_xx.bar for your language.
|
||||
Then 'mtn add' the file.
|
||||
After creating a .po file, edit the headers. Then run 'ant distclean poupdate'.
|
||||
</li>
|
||||
<li>
|
||||
Start to work:
|
||||
Edit the HTML files with any text editor.
|
||||
Be sure not to use an editor in HTML mode that reformats everything.
|
||||
To work with .po files efficiently, you may wish to use <a href="http://www.poedit.net/download.php">POEdit</a>
|
||||
</li>
|
||||
<li>
|
||||
Check in:
|
||||
mtn pull, mtn update. Then check in by "mtn ci -k yourname@mail.i2p file1 file2 ..."
|
||||
This collects the diff info of your changed file into your local repo. Then "mtn sync mtn.i2p2.de -k yourname-transport@mail.i2p i2p.i2p".
|
||||
This synchronizes your local repo with the repo on the target machine.
|
||||
</li>
|
||||
<li>
|
||||
Repeat. Check in often. Don't wait until it is perfect.
|
||||
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<p>As you can see, it's not that difficult.
|
||||
If you have questions about the meaning of the terms in the console, ask in #i2p-dev on IRC.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>FAQ</h2>
|
||||
|
||||
<b>Q: Why do I have to install monotone, Java, jsp, learn about .po files and html, etc.? Why can't I just do a translation and email it to you?</b>
|
||||
|
||||
<b>Answer: Several reasons:</b>
|
||||
|
||||
<ul>
|
||||
<li>You might be interested in translating via Transifex. Request to join a translation team <a href="https://www.transifex.com/projects/p/I2P/">here</a></li>
|
||||
<li>
|
||||
We don't have anybody who has time to accept manual contributions and submit them to our source control system on your behalf. Even if we did, it doesn't scale.</li>
|
||||
|
||||
<li>
|
||||
Maybe you are thinking translation is a one-step process. It isn't. You can't do it all at once. You will make mistakes. You need to test it and tweak it to make it look right <i>before</i> you submit it. Developers will update or add to the English text, thus requiring a translation update.
|
||||
</li>
|
||||
<li>
|
||||
Having translators use a source control system directly provides authentication and accountablility - we know who is doing what, and we can track changes, and revert them if necessary.
|
||||
|
||||
</li>
|
||||
<li>
|
||||
.po files are not difficult. If you don't want to work directly with them, we recommend 'poedit'.
|
||||
</li>
|
||||
<li>
|
||||
HTML files are not difficult. Just ignore the html stuff and translate the text.
|
||||
</li>
|
||||
<li>
|
||||
Installing and using monotone is not that difficult. Several of the translators and other contributors to I2P are non-programmers, and they use monotone regularly. Monotone is simply a source control system, it is not about "coding".
|
||||
</li>
|
||||
<li>
|
||||
Our items to translate are not "documents". They are html files and po files, with a specific format and character encoding (UTF-8) that must be maintained, and not corrupted by email programs or other methods of transfer.
|
||||
</li>
|
||||
<li>
|
||||
We looked at 'pootle' as a front-end for translators. It didn't work well, needed an administrator, and a pootle-based process would suffer from a number of the above flaws.</li>
|
||||
</ul>
|
||||
|
||||
<b>In summary:</b>
|
||||
|
||||
Yes, we know it is somewhat of a hurdle to get started. It's really the only possible way we can do it. Give it a try, it really isn't that hard.
|
||||
|
||||
<h2>More Information</h2>
|
||||
The #i2p-dev channel on IRC, or the <a href="http://zzz.i2p/forums/14">translation forum on zzz.i2p</a>.
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
52
i2p2www/pages/site/get-involved/index.html
Normal file
52
i2p2www/pages/site/get-involved/index.html
Normal file
@@ -0,0 +1,52 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Get Involved!{% endblock %}
|
||||
{% block content %}
|
||||
<h1>We need your help!</h1>
|
||||
<p>To get involved, please feel free to join us on the #i2p IRC channel (on
|
||||
irc.freenode.net, or within I2P on irc.freshcoffee.i2p or irc.postman.i2p).</p>
|
||||
<p>If you're interested in joining our <a href="{{ site_url('about/team') }}">team</a>, please get in
|
||||
touch as we're always looking for eager contributors!</p>
|
||||
<p>
|
||||
We need help in many areas, and you don't need to know Java to contribute!
|
||||
Here's a list to help you get started!</p>
|
||||
<ul>
|
||||
<li><b>Spread the Word!</b> —
|
||||
Tell people about I2P on forums, blogs, and comments to articles.
|
||||
Fix up the Wikipedia article about I2P in your language.
|
||||
Tell your friends.
|
||||
</li><li><b>Testing</b> —
|
||||
Run the latest builds from <a href="monotone.html">monotone</a>
|
||||
and report results on #i2p or as bugs on <a href="http://trac.i2p2.de/report/1">Trac</a>.
|
||||
</li><li><b>Documentation</b> —
|
||||
Help fix the parts of the website that are outdated or incomplete.
|
||||
Translate pages into other languages.
|
||||
</li><li><b>Pictures</b> —
|
||||
Make some more pictures, fix the old ones on the website
|
||||
</li><li><b>Content</b> —
|
||||
Make an eepsite! Add some content! Contribute to the community!
|
||||
</li><li><b>Services</b> —
|
||||
Run a service on an eepsite. It could be a proxy, a forum, a tracker,
|
||||
a naming service, a search engine, an eepsite monitor... many of these
|
||||
aren't that hard.
|
||||
</li><li><b>Applications</b> —
|
||||
Write or port applications for I2P! There's some guidelines and
|
||||
a list of ideas on the <a href="applications.html">applications page</a>.
|
||||
</li><li><b>Coding</b> —
|
||||
There's plenty to do if you know Java or are ready to learn.
|
||||
Check for open tickets on <a href="http://trac.i2p2.de/report/1">Trac</a>
|
||||
or the TODO list on <a href="http://zzz.i2p/">zzz.i2p</a> for
|
||||
some ideas on where to start.
|
||||
See the <a href="{{ site_url('get-involved/guides/newdevelopers') }}">new developer's guide</a> for details.
|
||||
</li><li><b>Translation</b> —
|
||||
Help translate the website and the software into your language.
|
||||
See the <a href="{{ site_url('get-involved/guides/newtranslators') }}">new translator's guide</a> for details.
|
||||
</li><li><b>Analysis</b> —
|
||||
Study or test the code to look for vulnerabilities.
|
||||
Both anonymity vulnerabilities from the various
|
||||
<a href="{{ site_url('docs/how/threatmodel') }}">threat models</a>,
|
||||
and DOS and other weaknesses due to securities holes,
|
||||
need researching.
|
||||
</li><li><b><a href="{{ site_url('get-involved/donate') }}">Donate</a></b>
|
||||
|
||||
</li></ul>
|
||||
{% endblock %}
|
34
i2p2www/pages/site/get-involved/roadmap.html
Normal file
34
i2p2www/pages/site/get-involved/roadmap.html
Normal file
@@ -0,0 +1,34 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Roadmap{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<h2 id="v0.9">0.9</h2>
|
||||
<ul>
|
||||
<li>Include some seed data in the distribution so a central reseed location isn't required?</li>
|
||||
<li>Reachability Mapping / handle peers partially reachable / enhanced <a href="{{ site_url('get-involved/todo') }}#fullRestrictedRoutes">restricted routes</a></li>
|
||||
<li>Improve help pages and website</li>
|
||||
<li>More translations</li>
|
||||
<li>SSU disconnect message</li>
|
||||
<li>Iterative floodfill lookups</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="v1.0">1.0</h2>
|
||||
<ul>
|
||||
<li>Full review of anonymity issues and other vulnerabilities</li>
|
||||
<li>Reduce memory usage, remove debugging overhead, make it run better on slow and embedded machines</li>
|
||||
<li>Docs</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="v2.0">2.0</h2>
|
||||
<ul>
|
||||
<li>Full restricted routes</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="v3.0">3.0</h2>
|
||||
<ul>
|
||||
<li>Tunnel mixing and padding</li>
|
||||
<li>User defined message delays</li>
|
||||
</ul>
|
||||
|
||||
<p>Please see the <a href="{{ site_url('get-involved/todo') }}">TODO</a> list for more detailed info about some of these tasks.</p>
|
||||
{% endblock %}
|
349
i2p2www/pages/site/get-involved/todo.html
Normal file
349
i2p2www/pages/site/get-involved/todo.html
Normal file
@@ -0,0 +1,349 @@
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}To Do List{% endblock %}
|
||||
{% block content %}
|
||||
<h1>I2P Project Targets</h1>
|
||||
<p>Below is a more detailed (yet still incomplete) discussion of the major areas
|
||||
of future development on the core I2P network, spanning the plausibly planned
|
||||
releases. This does not include stego transports, porting to wireless devices,
|
||||
or tools to secure the local machine, nor does it include client applications
|
||||
that will be essential in I2P's success. There are probably other things that
|
||||
will come up, especially as I2P gets more peer review, but these are the main
|
||||
'big things'. See also <a href="{{ site_url('get-involved/roadmap') }}">the roadmap</a>. Want to help?
|
||||
<a href="{{ site_url('get-involved') }}">Get involved</a>! </p>
|
||||
<br />
|
||||
<h2>Core functionality <span class="permalink"><a href="#core">[link]</a></span></h2>
|
||||
<ul class="targetlist">
|
||||
<li><a href="#nat">NAT/Firewall bridging via 1-hop restricted routes</a></li>
|
||||
<li><a href="#transport">High degree transport layer with UDP, NBIO, or NIO</a></li>
|
||||
<li><a href="#netdb">NetworkDB and profile tuning and ejection policy for
|
||||
large nets</a></li>
|
||||
</ul>
|
||||
<h2>Security / anonymity <span class="permalink"><a href="#security">[link]</a></span></h2>
|
||||
<ul class="targetlist">
|
||||
<li><a href="#tunnelId">Per-hop tunnel id & new permuted TunnelVerificationStructure
|
||||
encryption</a></li>
|
||||
<li><a href="#ordering">Strict ordering of participants within tunnels</a></li>
|
||||
<li><a href="#tunnelLength">Randomly permuted tunnel lengths</a></li>
|
||||
<li><a href="#fullRestrictedRoutes">Full blown n-hop restricted routes with
|
||||
optional trusted links</a></li>
|
||||
<li><a href="#hashcash">Hashcash for routerIdentity, destination, and tunnel
|
||||
request</a></li>
|
||||
<li><a href="#batching">Advanced tunnel operation (batching/mixing/throttling/padding)</a></li>
|
||||
<li><a href="#stop">Stop & go mix w/ garlics & tunnels</a></li>
|
||||
</ul>
|
||||
<h2>Performance <span class="permalink"><a href="performance.html">[link]</a></span></h2>
|
||||
<h2 id="core">Core functionality</h2>
|
||||
<ul class="targetlist">
|
||||
<li>
|
||||
<h3 id="nat">NAT/Firewall bridging via 1-hop restricted routes</h3>
|
||||
</li>
|
||||
<!-- <li style="list-style: none; display: inline"> -->
|
||||
<b><i>Implemented in I2P 0.6.0.6</i></b>
|
||||
<p>The functionality of allowing routers to fully participate within the network
|
||||
while behind firewalls and NATs that they do not control requires some basic
|
||||
restricted route operation (since those peers will not be able to receive
|
||||
inbound connections). To do this successfully, you consider peers one of
|
||||
two ways:</p>
|
||||
<!-- </li> -->
|
||||
</ul>
|
||||
<ul>
|
||||
<li><b>Peers who have reachable interfaces</b> - these peers do not need to
|
||||
do anything special</li>
|
||||
<li><b>Peers who do not have reachable interfaces</b> - these peers must build
|
||||
a tunnel pointing at them where the gateway is one of the peers they have
|
||||
established a connection with who has both a publicly reachable interface
|
||||
and who has agreed to serve as their 'introducer'.</li>
|
||||
</ul>
|
||||
<div style="margin-left:25px;">
|
||||
<p>To do this, peers who have no IP address simply connect to a few peers,
|
||||
build a tunnel through them, and publish a reference to those tunnels within
|
||||
their RouterInfo structure in the network database.</p>
|
||||
<p>When someone wants to contact any particular router, they first must get
|
||||
its RouterInfo from the network database, which will tell them whether they
|
||||
can connect directly (e.g. the peer has a publicly reachable interface)
|
||||
or whether they need to contact them indirectly. Direct connections occur
|
||||
as normal, while indirect connections are done through one of the published
|
||||
tunnels.</p>
|
||||
<p>When a router just wants to get a message or two to a specific hidden peer,
|
||||
they can just use the indirect tunnel for sending the payload. However,
|
||||
if the router wants to talk to the hidden peer often (for instance, as part
|
||||
of a tunnel), they will send a garlic routed message through the indirect
|
||||
tunnel to that hidden peer which unwraps to contain a message which should
|
||||
be sent to the originating router. That hidden peer then establishes an
|
||||
outbound connection to the originating router and from then on, those two
|
||||
routers can talk to each other directly over that newly established direct
|
||||
connection.</p>
|
||||
<p>Of course, that only works if the originating peer can receive connections
|
||||
(they aren't also hidden). However, if the originating peer is hidden, they
|
||||
can simply direct the garlic routed message to come back to the originating
|
||||
peer's inbound tunnel.</p>
|
||||
<p>This is not meant to provide a way for a peer's IP address to be concealed,
|
||||
merely as a way to let people behind firewalls and NATs fully operate within
|
||||
the network. Concealing the peer's IP address adds a little more work, as
|
||||
described <a href="#fullRestrictedRoutes">below.</a></p>
|
||||
<p>With this technique, any router can participate as any part of a tunnel.
|
||||
For efficiency purposes, a hidden peer would be a bad choice for an inbound
|
||||
gateway, and within any given tunnel, two neighboring peers wouldn't want
|
||||
to be hidden. But that is not technically necessary.</p>
|
||||
</div>
|
||||
<ul class="targetlist">
|
||||
<li>
|
||||
<h3 id="transport">High degree transport layer with UDP, NBIO, or NIO</h3>
|
||||
<b><i>Both UDP and NIO have been Implemented in I2P</i></b>
|
||||
<p>Standard TCP communication in Java generally requires blocking socket
|
||||
calls, and to keep a blocked socket from hanging the entire system, those
|
||||
blocking calls are done on their own threads. Our current TCP transport
|
||||
is implemented in a naive fashion - for each peer we are talking to, we
|
||||
have one thread reading and one thread writing. The reader thread simply
|
||||
loops a bunch of read() calls, building I2NP messages and adding them
|
||||
to our internal inbound message queue, and the writer thread pulls messages
|
||||
off a per-connection outbound message queue and shoves the data through
|
||||
write() calls.</p>
|
||||
<p>We do this fairly efficiently, from a CPU perspective - at any time,
|
||||
almost all of these threads are sitting idle, blocked waiting for something
|
||||
to do. However, each thread consumes real resources (on older Linux kernels,
|
||||
for instance, each thread would often be implemented as a fork()'ed process).
|
||||
As the network grows, the number of peers each router will want to talk
|
||||
with will increase (remember, I2P is fully connected, meaning that any
|
||||
given peer should know how to get a message to any other peer, and restricted
|
||||
route support will probably not significantly reduce the number of connections
|
||||
necessary). This means that with a 100,000 router network, each router
|
||||
will have up to 199,998 threads just to deal with the TCP connections!</p>
|
||||
<p>Obviously, that just won't work. We need to use a transport layer that
|
||||
can scale. In Java, we have two main camps:</p>
|
||||
<h4>UDP</h4>
|
||||
<b><i>Implemented in I2P 0.6 ("SSU") as documented <a href="{{ site_url('docs/transport/ssu') }}">elsewhere</a></i></b>
|
||||
<p>Sending and receiving UDP datagrams is a connectionless operation - if
|
||||
we are communicating with 100,000 peers, we simply stick the UDP packets
|
||||
in a queue and have a single thread pulling them off the queue and shoving
|
||||
them out the pipe (and to receive, have a single thread pulling in any
|
||||
UDP packets received and adding them to an inbound queue).</p>
|
||||
<p>However, moving to UDP means losing the benefits of TCP's ordering, congestion
|
||||
control, MTU discovery, etc. Implementing that code will take significant
|
||||
work, however I2P doesn't need it to be as strong as TCP. Specifically,
|
||||
a while ago I was taking some measurements in the simulator and on the
|
||||
live net, and the vast majority of messages transferred would fit easily
|
||||
within a single unfragmented UDP packet, and the largest of the messages
|
||||
would fit within 20-30 packets. As mule pointed out, TCP adds a significant
|
||||
overhead when dealing with so many small packets, as the ACKs are within
|
||||
an order of magnitude in size. With UDP, we can optimize the transport
|
||||
for both efficiency and resilience by taking into account I2P's particular
|
||||
needs.</p>
|
||||
<p>It will be a lot of work though.</p>
|
||||
<h4>NIO or NBIO</h4>
|
||||
<b><i>NIO Implemented in I2P 0.6.1.22 ("NTCP")</i></b>
|
||||
<p>In Java 1.4, a set of "New I/O" packages was introduced, allowing Java
|
||||
developers to take advantage of the operating system's nonblocking IO
|
||||
capabilities - allowing you to maintain a large number of concurrent IO
|
||||
operations without requiring a separate thread for each. There is much
|
||||
promise with this approach, as we can scalable handle a large number of
|
||||
concurrent connections and we don't have to write a mini-TCP stack with
|
||||
UDP. However, the NIO packages have not proven themselves to be battle-ready,
|
||||
as the Freenet developer's found. In addition, requiring NIO support would
|
||||
mean we can't run on any of the open source JVMs like <a href="http://www.kaffe.org/">Kaffe</a>,
|
||||
as <a href="http://www.classpath.org/">GNU/Classpath</a> has only limited
|
||||
support for NIO. <i>(note: this may not be the case anymore, as there
|
||||
has been some progress on Classpath's NIO, but it is an unknown quantity)</i></p>
|
||||
<p>Another alternative along the same lines is the <a href="http://www.eecs.harvard.edu/~mdw/proj/java-nbio/">Non
|
||||
Blocking I/O</a> package - essentially a cleanroom NIO implementation
|
||||
(written before NIO was around). It works by using some native OS code
|
||||
to do the nonblocking IO, passing off events through Java. It seems to
|
||||
be working with Kaffe, though there doesn't seem to be much development
|
||||
activity on it lately (likely due to 1.4's NIO deployment).</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="targetlist">
|
||||
<li>
|
||||
<h3 id="netdb">NetworkDB and profile tuning and ejection policy for large
|
||||
nets</h3>
|
||||
<p>Within the current network database and profile management implementation,
|
||||
we have taken the liberty of some practical shortcuts. For instance, we
|
||||
don't have the code to drop peer references from the K-buckets, as we
|
||||
don't have enough peers to even plausibly fill any of them, so instead,
|
||||
we just keep the peers in whatever bucket is appropriate. Another example
|
||||
deals with the peer profiles - the memory required to maintain each peer's
|
||||
profile is small enough that we can keep thousands of full blown profiles
|
||||
in memory without problems. While we have the capacity to use trimmed
|
||||
down profiles (which we can maintain 100s of thousands in memory), we
|
||||
don't have any code to deal with moving a profile from a "minimal profile"
|
||||
to a "full profile", a "full profile" to a "minimal profile", or to simply
|
||||
eject a profile altogether. It just wouldn't be practical to write that
|
||||
code yet, since we aren't going to need it for a while.</p>
|
||||
<p>That said, as the network grows we are going to want to keep these considerations
|
||||
in mind. We will have some work to do, but we can put it off for later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="security">Security / anonymity</h2>
|
||||
<ul class="targetlist">
|
||||
<li>
|
||||
<h3 id="tunnelId">Per-hop tunnel id & new permuted TunnelVerificationStructure
|
||||
encryption</h3>
|
||||
<b><i>Addressed in I2P 0.5 as documented <a href="tunnel-alt.html">elsewhere</a></i></b>
|
||||
<p>Right now, if Alice builds a four hop inbound tunnel starting at Elvis,
|
||||
going to Dave, then to Charlie, then Bob, and finally Alice (A<--B<--C<--D<--E),
|
||||
all five of them will know they are participating in tunnel "123", as
|
||||
the messages are tagged as such. What we want to do is give each hop their
|
||||
own unique tunnel hop ID - Charlie will receive messages on tunnel 234
|
||||
and forward them to tunnel 876 on Bob. The intent is to prevent Bob or
|
||||
Charlie from knowing that they are in Alice's tunnel, as if each hop in
|
||||
the tunnel had the same tunnel ID, collusion attacks aren't much work.
|
||||
</p>
|
||||
<p>Adding a unique tunnel ID per hop isn't hard, but by itself, insufficient.
|
||||
If Dave and Bob are under the control of the same attacker, they wouldn't
|
||||
be able to tell they are in the same tunnel due to the tunnel ID, but
|
||||
would be able to tell by the message bodies and verification structures
|
||||
by simply comparing them. To prevent that, the tunnel must use layered
|
||||
encryption along the path, both on the payload of the tunneled message
|
||||
and on the verification structure (used to prevent simple tagging attacks).
|
||||
This requires some simple modifications to the TunnelMessage, as well
|
||||
as the inclusion of per-hop secret keys delivered during tunnel creation
|
||||
and given to the tunnel's gateway. We must fix a maximum tunnel length
|
||||
(e.g. 16 hops) and instruct the gateway to encrypt the message to each
|
||||
of the 16 delivered secret keys, in reverse order, and to encrypt the
|
||||
signature of the hash of the (encrypted) payload at each step. The gateway
|
||||
then sends that 16-step encrypted message, along with a 16-step and 16-wide
|
||||
encrypted mapping to the first hop, which then decrypts the mapping and
|
||||
the payload with their secret key, looking in the 16-wide mapping for
|
||||
the entry associated with their own hop (keyed by the per-hop tunnel ID)
|
||||
and verifying the payload by checking it against the associated signed
|
||||
hash.</p>
|
||||
<p>The tunnel gateway does still have more information than the other peers
|
||||
in the tunnel, and compromising both the gateway and a tunnel participant
|
||||
would allow those peers to collude, exposing the fact that they are both
|
||||
in the same tunnel. In addition, neighboring peers know that they are
|
||||
in the same tunnel anyway, as they know who they send the message to (and
|
||||
with IP-based transports without restricted routes, they know who they
|
||||
got it from). However, the above two techniques significantly increase
|
||||
the cost of gaining meaningful samples when dealing with longer tunnels.</p>
|
||||
</li></ul>
|
||||
<ul class="targetlist">
|
||||
<li>
|
||||
<h3 id="ordering">Strict ordering of participants within tunnels</h3>
|
||||
<b><i>Implemented in release 0.6.2</i></b></li>
|
||||
</ul>
|
||||
<div style="margin-left:25px">
|
||||
<p>As Connelly <a href="http://article.gmane.org/gmane.network.i2p/22/">proposed</a>
|
||||
to deal with the <a href="http://prisms.cs.umass.edu/brian/pubs/wright-tissec.pdf">predecessor
|
||||
attack</a> <a href="http://prisms.cs.umass.edu/brian/pubs/wright.tissec.2008.pdf">(2008
|
||||
update)</a>, keeping the order of peers within our tunnels consistent
|
||||
(aka whenever Alice creates a tunnel with both Bob and Charlie in it,
|
||||
Bob's next hop is always Charlie), we address the issue as Bob doesn't
|
||||
get to substantially sample Alice's peer selection group. We may even
|
||||
want to explicitly allow Bob to participate in Alice's tunnels in only
|
||||
one way - receiving a message from Dave and sending it to Charlie - and
|
||||
if any of those peers are not available to participate in the tunnel (due
|
||||
to overload, network disconnection, etc), avoid asking Bob to participate
|
||||
in any tunnels until they are back online.</p>
|
||||
<p>More analysis is necessary for revising the tunnel creation - at the
|
||||
moment, we simply select and order randomly within the peer's top tier
|
||||
of peers (ones with fast + high capacity).</p>
|
||||
<p>Adding a strict ordering to peers in a tunnel also improves the anonymity
|
||||
of peers with 0-hop tunnels, as otherwise the fact that a peer's gateway
|
||||
is always the same would be particularly damning. However, peers with
|
||||
0-hop tunnels may want to periodically use a 1-hop tunnel to simulate
|
||||
the failure of a normally reliable gateway peer (so every MTBF*(tunnel
|
||||
duration) minutes, use a 1-hop tunnel).</p>
|
||||
</div>
|
||||
<ul class="targetlist"><li>
|
||||
<h3 id="tunnelLength">Randomly permuted tunnel lengths</h3>
|
||||
<b><i>Addressed in I2P 0.5 as documented <a href="tunnel-alt.html">elsewhere</a></i></b></li>
|
||||
</ul>
|
||||
<ul class="targetlist">
|
||||
<!-- <li style="list-style: none; display: inline"> -->
|
||||
<p>Without tunnel length permutation, if someone were to somehow detect that
|
||||
a destination had a particular number of hops, it might be able to use that
|
||||
information to identify the router the destination is located on, per the
|
||||
predecessor attack. For instance, if everyone has 2-hop tunnels, if Bob
|
||||
receives a tunnel message from Charlie and forwards it to Alice, Bob knows
|
||||
Alice is the final router in the tunnel. If Bob were to identify what destination
|
||||
that tunnel served (by means of colluding with the gateway and harvesting
|
||||
the network database for all of the LeaseSets), he would know the router
|
||||
on which that destination is located (and without restricted routes, that
|
||||
would mean what IP address the destination is on).</p>
|
||||
<p>It is to counter user behavior that tunnel lengths should be permuted,
|
||||
using algorithms based on the length requested (for example, the 1/MTBF
|
||||
length change for 0-hop tunnels outlined above).</p>
|
||||
<!-- </li> -->
|
||||
<li>
|
||||
<h3 id="fullRestrictedRoutes">Full blown n-hop restricted routes with optional
|
||||
trusted links</h3>
|
||||
<p>The restricted route functionality described before was simply a functional
|
||||
issue - how to let peers who would not otherwise be able to communicate
|
||||
do so. However, the concept of allowing restricted routes includes additional
|
||||
capabilities. For instance, if a router absolutely cannot risk communicating
|
||||
directly with any untrusted peers, they can set up trusted links through
|
||||
those peers, using them to both send and receive all of its messages.
|
||||
Those hidden peers who want to be completely isolated would also refuse
|
||||
to connect to peers who attempt to get them to (as demonstrated by the
|
||||
garlic routing technique outlined before) - they can simply take the garlic
|
||||
clove that has a request for delivery to a particular peer and tunnel
|
||||
route that message out one of the hidden peer's trusted links with instructions
|
||||
to forward it as requested.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h3 id="hashcash">Hashcash for routerIdentity, destination, and tunnel request</h3>
|
||||
<p>Within the network, we will want some way to deter people from consuming
|
||||
too many resources or from creating so many peers to mount a <a href="http://citeseer.ist.psu.edu/douceur02sybil.html">Sybil</a>
|
||||
attack. Traditional techniques such as having a peer see who is requesting
|
||||
a resource or running a peer aren't appropriate for use within I2P, as
|
||||
doing so would compromise the anonymity of the system. Instead, we want
|
||||
to make certain requests "expensive".</p>
|
||||
<p><a href="http://www.hashcash.org/">Hashcash</a> is one technique that
|
||||
we can use to anonymously increase the "cost" of doing certain activities,
|
||||
such as creating a new router identity (done only once on installation),
|
||||
creating a new destination (done only once when creating a service), or
|
||||
requesting that a peer participate in a tunnel (done often, perhaps 2-300
|
||||
times per hour). We don't know the "correct" cost of each type of certificate
|
||||
yet, but with some research and experimentation, we could set a base level
|
||||
that is sufficiently expensive while not an excessive burden for people
|
||||
with few resources.</p>
|
||||
<p>There are a few other algorithms that we can explore for making those
|
||||
requests for resources "nonfree", and further research on that front is
|
||||
appropriate.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h3 id="batching">Advanced tunnel operation (batching/mixing/throttling/padding)</h3>
|
||||
<p>To powerful passive external observers as well as large colluding internal
|
||||
observers, standard tunnel routing is vulnerable to traffic analysis attacks
|
||||
- simply watching the size and frequency of messages being passed between
|
||||
routers. To defend against these, we will want to essentially turn some
|
||||
of the tunnels into its own mix cascade - delaying messages received at
|
||||
the gateway and passing them in batches, reordering them as necessary,
|
||||
and injecting dummy messages (indistinguishable from other "real" tunnel
|
||||
messages by peers in the path). There has been a significant amount of
|
||||
<a href="http://freehaven.net/doc/sync-batching/sync-batching.pdf">research</a>
|
||||
on these algorithms that we can lean on prior to implementing the various
|
||||
tunnel mixing strategies.</p>
|
||||
<p>In addition to the anonymity aspects of more varied tunnel operation,
|
||||
there is a functional dimension as well. Each peer only has a certain
|
||||
amount of data they can route for the network, and to keep any particular
|
||||
tunnel from consuming an unreasonable portion of that bandwidth, they
|
||||
will want to include some throttles on the tunnel. For instance, a tunnel
|
||||
may be configured to throttle itself after passing 600 messages (1 per
|
||||
second), 2.4MB (4KBps), or exceeding some moving average (8KBps for the
|
||||
last minute). Excess messages may be delayed or summarily dropped. With
|
||||
this sort of throttling, peers can provide ATM-like QoS support for their
|
||||
tunnels, refusing to agree to allocate more bandwidth than the peer has
|
||||
available.</p>
|
||||
<p>In addition, we may want to implement code to dynamically reroute tunnels
|
||||
to avoid failed peers or to inject additional hops into the path. This
|
||||
can be done by garlic routing a message to any particular peer in a tunnel
|
||||
with instructions to redefine the next-hop in the tunnel.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h3 id="stop">Stop & go mix w/ garlics & tunnels</h3>
|
||||
<p>Beyond the per-tunnel batching and mixing strategy, there are further
|
||||
capabilities for protecting against powerful attackers, such as allowing
|
||||
each step in a garlic routed path to define a delay or window in which
|
||||
it should be forwarded on. This would enable protections against the long
|
||||
term intersection attack, as a peer could send a message that looks perfectly
|
||||
standard to most peers that pass it along, except at any peers where the
|
||||
clove exposed includes delay instructions.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="performance">Performance</h2>
|
||||
<p>
|
||||
Performance related improvements are listed on the
|
||||
<a href="performance.html">Performance</a> page.
|
||||
</p>
|
||||
{% endblock %}
|
Reference in New Issue
Block a user