Compare commits

..

73 Commits

Author SHA1 Message Date
61fe334d79 0.4.4 2016-11-28 09:59:45 +00:00
4985e07307 Enforce same-origin policy for POST 2016-11-28 09:14:17 +00:00
c1b40076df Update ignores 2016-11-28 03:39:25 +00:00
a2c98d83f0 Update translations 2016-11-28 03:33:22 +00:00
3234f05c6b Update translation strings 2016-11-27 10:00:04 +00:00
dc7eb02636 Updated translations 2016-11-27 09:52:04 +00:00
1e0f561126 Add missing POST check 2016-11-27 09:47:55 +00:00
8bd02eba47 Show a more helpful screen for CSRF errors 2016-11-27 07:54:13 +00:00
200756a13b Hook CSRF logging into I2P logs 2016-11-27 07:33:46 +00:00
57d12ca32f Add version to CSS URLs so browsers refetch after upgrades 2016-11-27 06:35:05 +00:00
90818cf1f4 Distinguish error messages from info messages in Material theme 2016-11-27 06:13:12 +00:00
3052824d1b Tweak error message to avoid XSS filter (ticket #1815) 2016-11-27 04:04:06 +00:00
b4b52dffa0 Move HungryHobo to "past developers" :( 2016-11-27 02:45:24 +00:00
de720d01c4 Added CSRF guards to all forms
Thanks Beardog for raising the issue!
2016-11-27 02:10:36 +00:00
694de2e4f6 Updated translation strings and translations 2016-11-24 02:54:11 +00:00
435ca2d12b Add links to source code in FAQ 2016-11-24 02:48:43 +00:00
849fbc26d4 Added new translations 2016-11-24 02:42:33 +00:00
37ce138788 Update history and about 2016-11-24 01:56:17 +00:00
ab099ff3a3 Click on truncated identity key to see details.
Allow user to click on truncated identity key to see full identity.

Explanation:
As a noob, I spent 15 minutes clicking around, reading FAQ, documentation, etc because I couldn't figure out how to get my full address.
This should not require any thought at all.
2015-12-11 10:42:56 +00:00
b73a52f48f Use new I2CP domain socket API
Requires I2P Android 0.9.26
2016-05-29 05:11:48 +00:00
4b2c54a29a 0.4.3
Checked in late, forgot to do so after actual release
2016-05-08 12:33:10 +00:00
7e9bbe614a Updated ignores 2016-01-28 03:44:14 +00:00
f5aed6719a New FAQ translations 2016-01-28 03:44:03 +00:00
4f649b32d3 Updated translations 2016-01-28 03:42:01 +00:00
c6d523f9b8 Updated history 2016-01-25 15:43:02 +00:00
ae0c0df63d Temporarily bundle older working Mime4J
The particular Apache James development build I picked included a newer Mime4J
that the server code couldn't actually use...
2016-01-25 15:25:37 +00:00
9c65660a66 Enable I2CP tunnel options to be configured in i2pbote.config (ticket #1708) 2016-01-24 23:06:32 +00:00
ed1419cd55 Remove unused import 2016-01-24 22:47:14 +00:00
2e0568fa66 Only bind IMAP to the configured address and port (ticket #1680) 2016-01-24 20:33:36 +00:00
701266ca98 Add commons-logging.jar from James to updater and installer 2016-01-24 18:59:09 +00:00
07b920d11e Bump required I2P version to 0.9.24 and re-enable IMAP 2016-01-24 05:02:42 +00:00
e0366db73e JavaDoc fix 2016-01-24 04:59:35 +00:00
c5e62dfcb3 Fix ECUtils method 2016-01-23 21:44:50 +00:00
c4588e673a 0.4.2 2015-11-19 06:12:16 +00:00
d1ef0161d9 Updated translation strings 2015-11-19 05:00:04 +00:00
ebacda4751 Remove SU3 files with "ant clean" 2015-11-19 04:43:27 +00:00
70cb8a778a Make contact's text field editable, display it in address book (#1667) 2015-11-18 11:09:14 +00:00
413ca2326d Updated translations 2015-11-17 09:31:15 +00:00
2e7ff07988 Updated translations 2015-11-15 06:20:45 +00:00
3ce9e87c60 AIOOBE fixes 2015-11-15 05:26:55 +00:00
11d679f5fd NPE fix 2015-11-15 05:04:12 +00:00
0835cfa793 Remove unused imports 2015-11-15 04:57:59 +00:00
035a4b609a CME fix 2015-11-15 04:49:08 +00:00
5b5aaae565 Fix Date format string for Java 6 and Android (ticket #1644) 2015-11-01 21:18:33 +00:00
1f6a407509 Updated translations 2015-11-01 11:12:51 +00:00
428aabe996 Added kay to contributors list 2015-11-01 11:12:42 +00:00
134c6ffb09 Removed HH's Bote address from FAQ (ticket #1642) 2015-11-01 11:12:06 +00:00
e35616ca1e Updated translations 2015-11-01 10:35:38 +00:00
767611f2c3 Fix migrator 2015-11-01 10:24:42 +00:00
92ae32cbb8 Use Notifications API to notify user of new emails 2015-11-01 04:13:27 +00:00
732a868581 Theme fixes, include NotoSans font 2015-10-18 11:03:34 +00:00
61ab5290be Added reminder 2015-10-17 13:38:27 +00:00
ca88452f01 Copy over code from I2P's CryptoCheck so I don't have to bump min-i2p-version 2015-10-17 13:37:20 +00:00
cb23a49234 Use I2P's test for unlimited crypto 2015-10-17 13:33:00 +00:00
2cf86f5f71 Linkify my name on about page 2015-10-17 13:21:34 +00:00
43196e5f08 Tweaked background color 2015-10-17 13:18:15 +00:00
187cfe77f2 Material theme improvements 2015-10-17 13:01:26 +00:00
172bd92aab Updated translations 2015-10-17 03:10:25 +00:00
245af96a99 Added notification and guide about unlimited strength crypto policy files 2015-10-17 02:36:03 +00:00
5cedc505c5 Implement snackbar 2015-10-17 00:32:54 +00:00
0d138b0b3d Material design: tweaked sidebar dimensions and style 2015-10-06 08:10:17 +00:00
0e6de14a63 Fixed JavaDoc generation 2015-09-28 12:20:00 +00:00
1e9a8e0e62 merge of '59904abe9efefe8ad0524f7992af7d78b0a02647'
and '62ca447c6d28866636b9699e1d361af029b8e2fa'
2015-09-28 12:16:38 +00:00
d3cb0ab3f6 0.4.1
Checked in late, forgot to do so after actual release
2015-09-28 12:16:31 +00:00
dev
30beafd36f Fixed #1661 and #1663.
Fix supplied by kay@mail.i2p.
2015-09-22 03:06:29 +00:00
dev
692f8334c2 Applied patch fixing a NPE when network and dht aren't present.
Patch supplied by kay@mail.i2p in #1662.
2015-09-22 02:53:15 +00:00
dev
40afba4093 Applied replacing _() with _t() from kay@mail.i2p in #1665. 2015-09-22 02:50:40 +00:00
e5fa4706db Fix loading of user guide and FAQ translations (#1641) 2015-09-12 15:40:16 +00:00
ecdd2ee426 Added new user guide translation 2015-09-12 14:30:22 +00:00
784a716f0a Updated translations 2015-09-12 14:29:53 +00:00
afdde691b4 CME fix 2015-09-02 01:33:49 +00:00
65d9439e03 Add owner to new ticket URL 2015-08-23 05:59:08 +00:00
8d19c4c78a Fixed CME 2015-08-21 02:22:35 +00:00
113 changed files with 24040 additions and 16809 deletions

View File

@ -33,6 +33,8 @@ commons-collections-.*.jar
commons-configuration-.*.jar
commons-io-.*.jar
commons-lang-.*.jar
commons-logging-.*.jar
csrfguard-.*.jar
james-server-filesystem-api-3.0.0-beta5-SNAPSHOT.jar
james-server-lifecycle-api-3.0.0-beta5-SNAPSHOT.jar
james-server-protocols-imap4-3.0.0-beta5-SNAPSHOT.jar

112
build.xml
View File

@ -12,13 +12,15 @@
<property name="junit.filename" value="junit-4.8.1.jar"/>
<property name="junit.url" value="http://sourceforge.net/projects/junit/files/junit/4.8.1/junit-4.8.1.jar/download"/>
<property name="bytebuddy.filename" value="byte-buddy-0.6.14.jar"/>
<property name="bytebuddy.url" value="https://search.maven.org/remotecontent?filepath=net/bytebuddy/byte-buddy/0.6.14/byte-buddy-0.6.14.jar" />
<property name="mockito.filename" value="mockito-core-2.0.31-beta.jar"/>
<property name="mockito.url" value="https://bintray.com/artifact/download/szczepiq/maven/org/mockito/mockito-core/2.0.31-beta/mockito-core-2.0.31-beta.jar"/>
<!-- Just the main jMock .jar, the .zip contains this and dependencies -->
<property name="jmock.filename" value="jmock-2.6.0.jar"/>
<property name="jmock.archive" value="jmock-2.6.0-jars.zip"/>
<property name="jmockcp" value="${lib}/jmock-2.6.0.jar:${lib}/hamcrest-core-1.3.jar:${lib}/hamcrest-library-1.3.jar:${lib}/jmock-legacy-2.6.0.jar:${lib}/cglib-nodep-2.2.3.jar:${lib}/objenesis-1.0.jar"/>
<property name="jmock.url" value="http://jmock.org/downloads/${jmock.archive}"/>
<property name="jmock.url" value="http://www.jmock.org/downloads/${jmock.archive}"/>
<!-- Dependencies -->
<!-- Local -->
@ -56,6 +58,17 @@
-->
<property name="james.url" value="http://download.i2p2.de/mirror/lib/james-server-app-3.0.0-beta5-20150627.102412-1076-app.zip"/>
<property name="james.includeinupdate" value="false"/>
<!-- Commons Logging from Apache James IMAP server -->
<property name="commonslogging.name" value="Commons Logging"/>
<property name="commonslogging.filename" value="commons-logging-1.0.3.jar"/>
<property name="commonslogging.includeinupdate" value="true"/>
<!-- Apacke Mime4J from Apache James IMAP server -->
<property name="mime4j.name" value="Apache Mime4J"/>
<property name="mime4j.filename" value="apache-mime4j-core-0.7.2.jar"/>
<property name="mime4j.hash" value="4d7434c68f94b81a253c12f28e6bbb4d6239c361d6086a46e22e594bb43ac660"/>
<property name="mime4j.archive" value="apache-mime4j-0.7.2-bin.zip"/>
<property name="mime4j.url" value="http://ftp.halifax.rwth-aachen.de/apache/james/mime4j/0.7.2/apache-mime4j-0.7.2-bin.zip"/>
<property name="mime4j.includeinupdate" value="true"/>
<!-- SubEtha SMTP -->
<property name="subetha.name" value="SubEtha SMTP"/>
<property name="subetha.filename" value="subethasmtp-3.1.7.jar"/>
@ -63,6 +76,12 @@
<property name="subetha.archive" value="subethasmtp-3.1.7.zip"/>
<property name="subetha.url" value="http://subethasmtp.googlecode.com/files/subethasmtp-3.1.7.zip"/>
<property name="subetha.includeinupdate" value="false"/>
<!-- OWASP CSRFGuard -->
<property name="csrf.name" value="OWASP CSRFGuard"/>
<property name="csrf.filename" value="csrfguard-3.1.0.jar"/>
<property name="csrf.hash" value="b9dc95baa44ede02a74192f4b50d6c68f3b5c53b5de05bb22acef5098e39511c"/>
<property name="csrf.url" value="https://repo1.maven.org/maven2/org/owasp/csrfguard/3.1.0/csrfguard-3.1.0.jar"/>
<property name="csrf.includeinupdate" value="true"/>
<!-- the following are only used by win32installer -->
<property name="i2p.mtn" value="../i2p.mtn"/>
@ -72,13 +91,17 @@
<fileset dir="${lib}" id="imaplibs">
<include name="apache-james-mailbox-api-0.6-20150508.040939-710.jar"/>
<include name="apache-james-mailbox-store-0.6-20150508.041003-704.jar"/>
<!-- Temporarily replaced
<include name="apache-mime4j-core-0.8.0-20150617.024907-738.jar"/>
<include name="apache-mime4j-dom-0.8.0-20150617.024927-735.jar"/>
-->
<include name="apache-mime4j-core-0.7.2.jar"/>
<include name="commons-codec-1.7.jar"/>
<include name="commons-collections-3.2.1.jar"/>
<include name="commons-configuration-1.9.jar"/>
<include name="commons-io-2.4.jar"/>
<include name="commons-lang-2.6.jar"/>
<include name="commons-logging-1.0.3.jar"/>
<include name="james-server-filesystem-api-3.0.0-beta5-SNAPSHOT.jar"/>
<include name="james-server-lifecycle-api-3.0.0-beta5-SNAPSHOT.jar"/>
<include name="james-server-protocols-imap4-3.0.0-beta5-SNAPSHOT.jar"/>
@ -116,6 +139,7 @@
<pathelement location="${lib}/${subetha.filename}" />
<pathelement location="${lib}/${jcommon.filename}" />
<pathelement location="${lib}/${jfreechart.filename}" />
<pathelement location="${lib}/${csrf.filename}" />
<pathelement location="src/main/webapp/WEB-INF/classes" />
<fileset refid="imaplibs"/>
</path>
@ -173,16 +197,22 @@
<available property="mailapiexists" file="${lib}/${mailapi.filename}" type="file"/>
<available property="bcprovexists" file="${lib}/${bcprov.filename}" type="file"/>
<available property="jamesexists" file="${lib}/${james.filename}" type="file"/>
<available property="mime4jexists" file="${lib}/${mime4j.filename}" type="file"/>
<available property="subethaexists" file="${lib}/${subetha.filename}" type="file"/>
<available property="csrfexists" file="${lib}/${csrf.filename}" type="file"/>
<ant target="downloadmailapi"/>
<ant target="downloadbcprov"/>
<ant target="downloadjames"/>
<ant target="downloadmime4j"/>
<ant target="downloadsubetha"/>
<ant target="downloadcsrf"/>
<checkdep dep="mailapi"/>
<checkdep dep="bcprov"/>
<checkdep dep="mime4j"/>
<checkdep dep="subetha"/>
<checkdep dep="csrf"/>
</target>
<!-- compiles everything under src/main/java, but not src/test/ or src/build/ -->
@ -240,6 +270,7 @@
<mkdir dir="ant_build" />
<war destfile="i2pbote.war" webxml="ant_build/web.xml">
<classes dir="ant_build/classes" includes="i2p/bote/web/** i2p/bote/jsp/** org/apache/jsp/**" />
<classes dir="src/main/webapp/WEB-INF/classes" includes="*.properties"/>
<fileset dir="src/main/webapp" includes="*.html"/>
<fileset dir="src/main/webapp/" includes="*.xml"/>
<webinf dir="src/main/webapp/WEB-INF/tlds" includes="*.tld"/>
@ -248,10 +279,11 @@
<lib file="${lib}/${bcprov.filename}"/>
<lib file="${lib}/${ntruenc.filename}"/>
<lib file="${lib}/${scrypt.filename}"/>
<lib file="${lib}/${lzma.filename"/>
<lib file="${lib}/${lzma.filename}"/>
<lib file="${lib}/${gmss.filename}"/>
<lib file="${lib}/${jcommon.filename}" />
<lib file="${lib}/${jfreechart.filename}" />
<lib file="${lib}/${csrf.filename}"/>
<zipfileset dir="src/main/webapp/html" prefix="html"/>
<zipfileset dir="src/main/webapp/themes" prefix="themes"/>
</war>
@ -337,7 +369,12 @@
<includedep updater="true" dep="mailapi"/>
<includedep updater="true" dep="bcprov"/>
<includedep updater="true" dep="james"/>
<!-- commons-logging handled separately, was added later -->
<includedep updater="true" dep="commonslogging"/>
<!-- mime4j handled separately temporarily -->
<includedep updater="true" dep="mime4j"/>
<includedep updater="true" dep="subetha"/>
<includedep updater="true" dep="csrf"/>
<copy file="src/main/scripts/encrypt.sh" todir="plugin/plugin.tmp/lib"/>
<copy file="src/main/scripts/decrypt.sh" todir="plugin/plugin.tmp/lib"/>
@ -381,6 +418,7 @@
<includedep dep="bcprov"/>
<includedep dep="james"/>
<includedep dep="subetha"/>
<includedep dep="csrf"/>
<!-- make the install xpi2p -->
<copy file="plugin/plugin.config" todir="plugin/plugin.tmp" overwrite="true" />
@ -397,6 +435,7 @@
<mkdir dir="ant_build" />
<war destfile="i2pbote-plugin.war" webxml="ant_build/web.xml">
<classes dir="ant_build/classes" includes="i2p/bote/web/** i2p/bote/jsp/** org/apache/jsp/**" />
<classes dir="src/main/webapp/WEB-INF/classes" includes="*.properties"/>
<fileset dir="src/main/webapp" includes="*.html"/>
<fileset dir="src/main/webapp/" includes="*.xml"/>
<webinf dir="src/main/webapp/WEB-INF/tlds" includes="*.tld"/>
@ -517,6 +556,20 @@
</apply>
</target>
<target name="packdep.commonslogging">
<packdep dep="commonslogging"/>
</target>
<target name="removepack.commonslogging">
<removepack dep="commonslogging"/>
</target>
<target name="packdep.mime4j">
<packdep dep="mime4j"/>
</target>
<target name="removepack.mime4j">
<removepack dep="mime4j"/>
</target>
<target name="packdep.subetha">
<packdep dep="subetha"/>
</target>
@ -524,6 +577,13 @@
<removepack dep="subetha"/>
</target>
<target name="packdep.csrf">
<packdep dep="csrf"/>
</target>
<target name="removepack.csrf">
<removepack dep="csrf"/>
</target>
<target name="bundle" depends="compile">
<!-- Update the messages_*.po files.
We need to supply the bat file for windows, and then change the fail property to true -->
@ -588,6 +648,7 @@
<copy file="${lib}/flexi-gmss-1.7p1.jar" todir="${i2pinstallerplugindir}/lib"/>
<copy file="${lib}/jcommon-1.0.23.jar" todir="${i2pinstallerplugindir}/lib"/>
<copy file="${lib}/jfreechart-1.0.19.jar" todir="${i2pinstallerplugindir}/lib"/>
<copy file="${lib}/${csrf.filename}" todir="${i2pinstallerplugindir}/lib"/>
<!-- build the I2P + I2P-Bote install.jar -->
<ant antfile="${installerdir}/i2p.i2p/build.xml" target="installer" inheritAll="false"/>
<copy file="${installerdir}/i2p.i2p/install.jar" todir="${installerresources}"/>
@ -652,6 +713,8 @@
<target name="junit" depends="compile">
<available property="junitexists" file="${lib}/${junit.filename}" type="file"/>
<ant target="downloadjunit"/>
<available property="bytebuddyexists" file="${lib}/${bytebuddy.filename}" type="file"/>
<ant target="downloadbytebuddy"/>
<available property="mockitoexists" file="${lib}/${mockito.filename}" type="file"/>
<ant target="downloadmockito"/>
<available property="jmockexists" file="${lib}/${jmock.filename}" type="file"/>
@ -660,6 +723,7 @@
<path id="junitcp">
<pathelement location="${lib}/${junit.filename}"/>
<pathelement location="${lib}/${mockito.filename}"/>
<pathelement location="${lib}/${bytebuddy.filename}"/>
<pathelement path="${jmockcp}"/>
<pathelement location="./ant_build/classes"/>
<path refid="cp"/>
@ -707,6 +771,16 @@
<get src="${junit.url}" verbose="true" dest="${lib}/${junit.filename}"/>
</target>
<target name="downloadbytebuddy" unless="bytebuddyexists">
<input message="ByteBuddy not found, download now?" validargs="y,n" addproperty="userinput.bytebuddy"/>
<fail message="OK, aborting build." >
<condition>
<equals arg1="${userinput.bytebuddy}" arg2="n"/>
</condition>
</fail>
<get src="${bytebuddy.url}" verbose="true" dest="${lib}/${bytebuddy.filename}"/>
</target>
<target name="downloadmockito" unless="mockitoexists">
<input message="Mockito not found, download now?" validargs="y,n" addproperty="userinput.mockito"/>
<fail message="OK, aborting build." >
@ -766,13 +840,16 @@
<patternset>
<include name="**/apache-james-mailbox-api-0.6-20150508.040939-710.jar"/>
<include name="**/apache-james-mailbox-store-0.6-20150508.041003-704.jar"/>
<!-- Handled separately temporarily
<include name="**/apache-mime4j-core-0.8.0-20150617.024907-738.jar"/>
<include name="**/apache-mime4j-dom-0.8.0-20150617.024927-735.jar"/>
-->
<include name="**/commons-codec-1.7.jar"/>
<include name="**/commons-collections-3.2.1.jar"/>
<include name="**/commons-configuration-1.9.jar"/>
<include name="**/commons-io-2.4.jar"/>
<include name="**/commons-lang-2.6.jar"/>
<include name="**/commons-logging-1.0.3.jar"/>
<include name="**/james-server-filesystem-api-3.0.0-beta5-SNAPSHOT.jar"/>
<include name="**/james-server-lifecycle-api-3.0.0-beta5-SNAPSHOT.jar"/>
<include name="**/james-server-protocols-imap4-3.0.0-beta5-SNAPSHOT.jar"/>
@ -794,6 +871,23 @@
<delete file="${lib}/${james.archive}"/>
</target>
<target name="downloadmime4j" unless="mime4jexists">
<input message="Apache Mime4J not found, download now?" validargs="y,n" addproperty="userinput.junit"/>
<fail message="OK, aborting build.">
<condition>
<equals arg1="${userinput.junit}" arg2="n"/>
</condition>
</fail>
<get src="${mime4j.url}" verbose="true" dest="${lib}/${mime4j.archive}"/>
<unzip src="${lib}/${mime4j.archive}" dest="${lib}">
<patternset includes="**/${mime4j.filename}"/>
<mapper>
<flattenmapper/>
</mapper>
</unzip>
<!--<delete file="${lib}/${mime4j.archive}"/>-->
</target>
<target name="downloadsubetha" unless="subethaexists">
<input message="SubEtha SMTP not found, download now?" validargs="y,n" addproperty="userinput.junit"/>
<fail message="OK, aborting build.">
@ -811,6 +905,16 @@
<delete file="${lib}/${subetha.archive}"/>
</target>
<target name="downloadcsrf" unless="csrfexists">
<input message="OWASP CSRFGuard not found, download now?" validargs="y,n" addproperty="userinput.csrf"/>
<fail message="OK, aborting build.">
<condition>
<equals arg1="${userinput.csrf}" arg2="n"/>
</condition>
</fail>
<get src="${csrf.url}" verbose="true" dest="${lib}/${csrf.filename}"/>
</target>
<!-- Write the app version into ${version} -->
<!-- Depends on compile b/c it gets the app version from I2PBote.class -->
<target name="getversion" depends="compile">
@ -896,7 +1000,7 @@
</java>
<javadoc
sourcepath="src"
sourcepath="src/main/java"
destdir="javadoc"
classpathref="cp"
windowtitle="I2P-Bote"
@ -921,6 +1025,8 @@
<delete dir="plugin/plugin.tmp" />
<delete file="i2pbote.xpi2p" />
<delete file="i2pbote-update.xpi2p" />
<delete file="i2pbote.su3" />
<delete file="i2pbote-update.su3" />
<delete file="src.zip" />
<delete file="i2pinstall.exe" />
<delete dir="javadoc" />

View File

@ -1,6 +1,34 @@
I2P-Bote Version History
------------------------
0.4.4 (Released on Nov 28, 2016)
* Add CSRF guards to all forms (thanks Beardog for raising the issue!)
* Tweak error message to avoid XSS filter (ticket #1815)
* Improve identities list usability (thanks Jonathan!)
* Ensure CSS gets gets reloaded after updates
0.4.3 (Released on Jan 28, 2016)
* Re-enabled IMAP (ticket #1678)
* Only bind IMAP to the configured address and port (ticket #1680)
* Enable I2CP tunnel options to be configured in i2pbote.config (ticket #1708)
0.4.2 (Released on Nov 19, 2015)
* Added UI notification and guide about unlimited strength crypto policy files
* New: desktop notification when a new email arrives (only when JS enabled)
* Fixed bugs:
o AIOOBE on empty packets (ticket #1603)
o Crashing with Java 6 (ticket #1644)
o NPE when network and DHT aren't present (ticket #1662)
o Couldn't edit contact's text field (ticket #1667)
o Migrator running incorrectly (ticket #1693)
o CME when checking email (ticket #1703)
o NPE when checking email in text browser before init (ticket #1704)
0.4.1 (Released on Sep 12, 2015)
* Fixed bugs:
o ConcurrentModificationException errors in logs
o User guide and FAQ not loading translations
0.4 (Released on Aug 21, 2015)
* Fixed bugs:
o Email checking would get stuck if no new mail was found

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1393
locale/messages_ko.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1408
locale/messages_tr.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -40,5 +40,5 @@ description_zh=安全分布式电子邮件
description_ar=بريد الكتروني الآمن و الغير متمركز
license=GPL V3
min-java-version=1.6
min-i2p-version=0.9.18
min-i2p-version=0.9.24
author=str4d@mail.i2p

View File

@ -1 +1 @@
webapps.i2pbote.classpath=$I2P/lib/jstl.jar,$I2P/lib/standard.jar,$PLUGIN/lib/i2pbote.jar,$PLUGIN/lib/mailapi-1.5.4.jar,$PLUGIN/lib/bcprov-jdk15on-152.jar,$PLUGIN/lib/flexi-gmss-1.7p1.jar,$PLUGIN/lib/ntruenc-1.2.jar,$PLUGIN/lib/scrypt-1.4.0.jar,$PLUGIN/lib/lzma-9.20.jar,$PLUGIN/lib/apache-james-mailbox-api-0.6-20150508.040939-710.jar,$PLUGIN/lib/apache-james-mailbox-store-0.6-20150508.041003-704.jar,$PLUGIN/lib/apache-mime4j-core-0.8.0-20150617.024907-738.jar,$PLUGIN/lib/commons-codec-1.7.jar,$PLUGIN/lib/commons-collections-3.2.1.jar,$PLUGIN/lib/commons-configuration-1.9.jar,$PLUGIN/lib/commons-io-2.4.jar,$PLUGIN/lib/commons-lang-2.6.jar,$PLUGIN/lib/james-server-filesystem-api-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/james-server-lifecycle-api-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/james-server-protocols-imap4-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/james-server-protocols-library-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/james-server-util-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/jcommon-1.0.23.jar,$PLUGIN/lib/jfreechart-1.0.19.jar,$PLUGIN/lib/jutf7-1.0.0.jar,$PLUGIN/lib/log4j-1.2.17.jar,$PLUGIN/lib/netty-3.3.1.Final.jar,$PLUGIN/lib/protocols-api-1.6.4-20150617.121129-1080.jar,$PLUGIN/lib/protocols-imap-1.6.4-20150617.121245-927.jar,$PLUGIN/lib/protocols-netty-1.6.4-20150617.121137-1044.jar,$PLUGIN/lib/slf4j-api-1.7.2.jar,$PLUGIN/lib/slf4j-log4j12-1.7.2.jar,$PLUGIN/lib/subethasmtp-3.1.7.jar
webapps.i2pbote.classpath=$I2P/lib/jstl.jar,$I2P/lib/standard.jar,$PLUGIN/lib/i2pbote.jar,$PLUGIN/lib/mailapi-1.5.4.jar,$PLUGIN/lib/bcprov-jdk15on-152.jar,$PLUGIN/lib/flexi-gmss-1.7p1.jar,$PLUGIN/lib/ntruenc-1.2.jar,$PLUGIN/lib/scrypt-1.4.0.jar,$PLUGIN/lib/lzma-9.20.jar,$PLUGIN/lib/apache-james-mailbox-api-0.6-20150508.040939-710.jar,$PLUGIN/lib/apache-james-mailbox-store-0.6-20150508.041003-704.jar,$PLUGIN/lib/apache-mime4j-core-0.7.2.jar,$PLUGIN/lib/commons-codec-1.7.jar,$PLUGIN/lib/commons-collections-3.2.1.jar,$PLUGIN/lib/commons-configuration-1.9.jar,$PLUGIN/lib/commons-io-2.4.jar,$PLUGIN/lib/commons-lang-2.6.jar,$PLUGIN/lib/commons-logging-1.0.3.jar,$PLUGIN/lib/james-server-filesystem-api-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/james-server-lifecycle-api-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/james-server-protocols-imap4-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/james-server-protocols-library-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/james-server-util-3.0.0-beta5-SNAPSHOT.jar,$PLUGIN/lib/jcommon-1.0.23.jar,$PLUGIN/lib/jfreechart-1.0.19.jar,$PLUGIN/lib/jutf7-1.0.0.jar,$PLUGIN/lib/log4j-1.2.17.jar,$PLUGIN/lib/netty-3.3.1.Final.jar,$PLUGIN/lib/protocols-api-1.6.4-20150617.121129-1080.jar,$PLUGIN/lib/protocols-imap-1.6.4-20150617.121245-927.jar,$PLUGIN/lib/protocols-netty-1.6.4-20150617.121137-1044.jar,$PLUGIN/lib/slf4j-api-1.7.2.jar,$PLUGIN/lib/slf4j-log4j12-1.7.2.jar,$PLUGIN/lib/subethasmtp-3.1.7.jar,$PLUGIN/lib/csrfguard-3.1.0.jar

View File

@ -64,13 +64,13 @@ do
echo "Updating the $i file from the tags..."
# extract strings from java and jsp files, and update messages.po files
# translate calls must be one of the forms:
# _("foo")
# _t("foo")
# _x("foo")
# To start a new translation, copy the header from an old translation to the new .po file,
# then ant distclean poupdate.
find $JPATHS -name *.java > $TMPFILE
xgettext -f $TMPFILE -F -L java --from-code=UTF-8 \
--keyword=_ --keyword=_x \
--keyword=_t --keyword=_x \
-o ${i}t
if [ $? -ne 0 ]
then

View File

@ -21,7 +21,7 @@
package i2p.bote;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.email.EmailIdentity.IdentityConfig;
import i2p.bote.packet.dht.Contact;
@ -31,6 +31,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import net.i2p.I2PAppContext;
@ -65,14 +66,13 @@ public class Configuration implements IdentityConfig {
private static final String TRASH_FOLDER_DIR = "trash"; // relative to I2P_BOTE_SUBDIR
private static final String MIGRATION_VERSION_FILE = "migratedVersion"; // relative to I2P_BOTE_SUBDIR
private static final List<Theme> BUILT_IN_THEMES = Arrays.asList(new Theme[] { // theme IDs correspond to a theme directory in the .war
new Theme("material", _("Material")),
new Theme("lblue", _("Light Blue")),
new Theme("vanilla", _("Vanilla"))
new Theme("material", _t("Material")),
new Theme("lblue", _t("Light Blue")),
new Theme("vanilla", _t("Vanilla"))
});
private static final String THEME_SUBDIR = "themes"; // relative to I2P_BOTE_SUBDIR
// Parameter names in the config file
private static final String PARAMETER_I2CP_DOMAIN_SOCKET_ENABLED = "i2cpDomainSocketEnabled";
private static final String PARAMETER_STORAGE_SPACE_INBOX = "storageSpaceInbox";
private static final String PARAMETER_STORAGE_SPACE_RELAY = "storageSpaceRelay";
private static final String PARAMETER_STORAGE_TIME = "storageTime";
@ -108,7 +108,6 @@ public class Configuration implements IdentityConfig {
private static final String PARAMETER_THEME = "theme";
// Defaults for each parameter
private static final boolean DEFAULT_I2CP_DOMAIN_SOCKET_ENABLED = false;
private static final int DEFAULT_STORAGE_SPACE_INBOX = 1024 * 1024 * 1024;
private static final int DEFAULT_STORAGE_SPACE_RELAY = 100 * 1024 * 1024;
private static final int DEFAULT_STORAGE_TIME = 31; // in days
@ -141,6 +140,21 @@ public class Configuration implements IdentityConfig {
private static final String DEFAULT_UPDATE_URL = "http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/i2pbote-update.xpi2p";
private static final int DEFAULT_UPDATE_CHECK_INTERVAL = 60; // in minutes
private static final String DEFAULT_THEME = "material";
// I2CP parameters allowed in the config file
// Undefined parameters use the I2CP defaults
private static final String PARAMETER_I2CP_DOMAIN_SOCKET = "i2cp.domainSocket";
private static final List<String> I2CP_PARAMETERS = Arrays.asList(new String[] {
PARAMETER_I2CP_DOMAIN_SOCKET,
"inbound.length",
"inbound.lengthVariance",
"inbound.quantity",
"inbound.backupQuantity",
"outbound.length",
"outbound.lengthVariance",
"outbound.quantity",
"outbound.backupQuantity",
});
private Log log = new Log(Configuration.class);
private Properties properties;
@ -222,23 +236,23 @@ public class Configuration implements IdentityConfig {
* @param enabled ignored if not on Android.
* @since 0.2.10
*/
public void setI2CPDomainSocketEnabled(boolean enabled) {
public void setI2CPDomainSocket(String name) {
if (SystemVersion.isAndroid())
properties.setProperty(
PARAMETER_I2CP_DOMAIN_SOCKET_ENABLED,
String.valueOf(enabled));
PARAMETER_I2CP_DOMAIN_SOCKET, name);
}
/**
* @return false if not on Android.
* @since 0.2.10
* @return a Properties containing the current I2CP options.
* @since 0.4.3
*/
public boolean isI2CPDomainSocketEnabled() {
return SystemVersion.isAndroid() ?
getBooleanParameter(
PARAMETER_I2CP_DOMAIN_SOCKET_ENABLED,
DEFAULT_I2CP_DOMAIN_SOCKET_ENABLED) :
false;
public Properties getI2CPOptions() {
Properties opts = new Properties();
for (Map.Entry<Object, Object> entry : properties.entrySet()) {
if (I2CP_PARAMETERS.contains(entry.getKey()))
opts.put(entry.getKey(), entry.getValue());
}
return opts;
}
public File getDestinationKeyFile() {
@ -738,4 +752,4 @@ public class Configuration implements IdentityConfig {
return true;
}
}
}
}

View File

@ -21,7 +21,7 @@
package i2p.bote;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.addressbook.AddressBook;
import i2p.bote.crypto.wordlist.WordListAnchor;
import i2p.bote.debug.DebugSupport;
@ -128,7 +128,7 @@ import org.apache.commons.configuration.ConfigurationException;
*/
public class I2PBote implements NetworkStatusSource, EmailFolderManager, MailSender, PasswordVerifier {
public static final int PROTOCOL_VERSION = 4;
private static final String APP_VERSION = "0.4";
private static final String APP_VERSION = "0.4.4";
private static final int STARTUP_DELAY = 3; // the number of minutes to wait before connecting to I2P (this gives the router time to get ready)
private static volatile I2PBote instance;
@ -243,10 +243,9 @@ public class I2PBote implements NetworkStatusSource, EmailFolderManager, MailSen
// set tunnel names
sessionProperties.setProperty("inbound.nickname", "I2P-Bote");
sessionProperties.setProperty("outbound.nickname", "I2P-Bote");
if (configuration.isI2CPDomainSocketEnabled())
sessionProperties.setProperty("i2cp.domainSocket", "true");
sessionProperties.putAll(configuration.getI2CPOptions());
// According to sponge, muxed depends on gzip, so leave gzip enabled
// read the local destination key from the key file if it exists
File destinationKeyFile = configuration.getDestinationKeyFile();
FileReader fileReader = null;
@ -401,8 +400,7 @@ public class I2PBote implements NetworkStatusSource, EmailFolderManager, MailSen
backgroundThreads.add(connectTask);
connectTask.start();
// TODO Fix log4j loading so IMAP can start
if (false && configuration.isImapEnabled())
if (configuration.isImapEnabled())
startImap();
if (configuration.isSmtpEnabled())
startSmtp();
@ -473,6 +471,9 @@ public class I2PBote implements NetworkStatusSource, EmailFolderManager, MailSen
public Contact lookupInDirectory(String name) throws InterruptedException {
Hash key = EmailIdentity.calculateHash(name);
if(null == dht){
return null;
}
DhtResults results = dht.findOne(key, Contact.class);
if (!results.isEmpty()) {
DhtStorablePacket packet = results.getPackets().iterator().next();
@ -513,7 +514,7 @@ public class I2PBote implements NetworkStatusSource, EmailFolderManager, MailSen
String sender = email.getOneFromAddress();
EmailIdentity senderIdentity = identities.extractIdentity(sender);
if (senderIdentity == null)
throw new MessagingException(_("No identity matches the sender/from field: " + sender));
throw new MessagingException(_t("No identity matches the sender/from field: " + sender));
email.sign(senderIdentity, identities);
}
@ -524,11 +525,13 @@ public class I2PBote implements NetworkStatusSource, EmailFolderManager, MailSen
}
public synchronized void checkForMail() throws PasswordException, IOException, GeneralSecurityException {
emailChecker.checkForMail();
if (emailChecker != null)
emailChecker.checkForMail();
}
public synchronized void checkForMail(String key) throws PasswordException, IOException, GeneralSecurityException {
emailChecker.checkForMail(key);
if (emailChecker != null)
emailChecker.checkForMail(key);
}
/**
@ -576,8 +579,7 @@ public class I2PBote implements NetworkStatusSource, EmailFolderManager, MailSen
public void setImapEnabled(boolean enabled) {
configuration.setImapEnabled(enabled);
if (imapService==null || !imapService.isStarted()) {
// TODO Fix log4j loading so IMAP can start
if (false && enabled)
if (enabled)
startImap();
}
else if (imapService!=null && imapService.isStarted() && !enabled)
@ -718,29 +720,29 @@ public class I2PBote implements NetworkStatusSource, EmailFolderManager, MailSen
StatusListener lsnr) throws IOException, GeneralSecurityException, PasswordException {
File passwordFile = configuration.getPasswordFile();
lsnr.updateStatus(_("Checking password"));
lsnr.updateStatus(_t("Checking password"));
if (!FileEncryptionUtil.isPasswordCorrect(oldPassword, passwordFile))
throw new PasswordException(_("The old password is not correct."));
throw new PasswordException(_t("The old password is not correct."));
if (!Arrays.equals(newPassword, confirmNewPassword))
throw new PasswordException(_("The new password and the confirmation password do not match."));
throw new PasswordException(_t("The new password and the confirmation password do not match."));
// lock so no files are encrypted with the old password while the password is being changed
synchronized(passwordCache) {
passwordCache.setPassword(newPassword);
DerivedKey newKey = passwordCache.getKey();
lsnr.updateStatus(_("Re-encrypting identities"));
lsnr.updateStatus(_t("Re-encrypting identities"));
identities.changePassword(oldPassword, newKey);
lsnr.updateStatus(_("Re-encrypting addressbook"));
lsnr.updateStatus(_t("Re-encrypting addressbook"));
addressBook.changePassword(oldPassword, newKey);
for (EmailFolder folder: getEmailFolders()) {
lsnr.updateStatus(_("Re-encrypting folder") + " " + folder.getName());
lsnr.updateStatus(_t("Re-encrypting folder") + " " + folder.getName());
folder.changePassword(oldPassword, newKey);
}
lsnr.updateStatus(_("Updating password file"));
lsnr.updateStatus(_t("Updating password file"));
FileEncryptionUtil.writePasswordFile(passwordFile, passwordCache.getPassword(), newKey);
}
}

View File

@ -133,7 +133,7 @@ public class Util {
formatter.setMaximumFractionDigits(1);
else
formatter.setMaximumFractionDigits(0);
return _(messageKey, formatter.format(value));
return _t(messageKey, formatter.format(value));
}
/**
@ -317,15 +317,15 @@ public class Util {
}
}
public static String _(String messageKey) {
public static String _t(String messageKey) {
return Translate.getString(messageKey, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
}
public static String _(String messageKey, Object parameter) {
public static String _t(String messageKey, Object parameter) {
return Translate.getString(messageKey, parameter, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
}
public static String _(String messageKey, Object parameter1, Object parameter2) {
public static String _t(String messageKey, Object parameter1, Object parameter2) {
return Translate.getString(messageKey, parameter1, parameter2, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
}
@ -453,4 +453,4 @@ public class Util {
throw new NumberFormatException("Can't convert value <" + stringValue + "> for parameter <" + parameterName + "> to int.");
}
}
}
}

View File

@ -42,7 +42,7 @@ public class ECDH256_ECDSA256 extends ECDH_ECDSA {
@Override
public String getName() {
return Util._("256-bit Elliptic Curve Encryption");
return Util._t("256-bit Elliptic Curve Encryption");
}
@Override
@ -94,4 +94,4 @@ public class ECDH256_ECDSA256 extends ECDH_ECDSA {
System.arraycopy(sigKeyBytes, 0, bytes, encrKeyBytes.length, sigKeyBytes.length);
return createPrivateKeyPair(bytes);
}
}
}

View File

@ -47,7 +47,7 @@ public class ECDH521_ECDSA521 extends ECDH_ECDSA {
@Override
public String getName() {
return Util._("521-bit Elliptic Curve Encryption");
return Util._t("521-bit Elliptic Curve Encryption");
}
@Override
@ -104,4 +104,4 @@ public class ECDH521_ECDSA521 extends ECDH_ECDSA {
byte[] bytes = Base64.decode(base64);
return createPrivateKeyPair(bytes);
}
}
}

View File

@ -57,8 +57,8 @@ import net.i2p.util.Log;
* The same is true for hashing which uses SHA-256 regardless of the ECDH/ECDSA key length.
* <p/>
* This class uses BouncyCastle for everything related to ECC (key encoding and decoding,
* asymmetric encryption, signing, asymmetric key generation), and the AES implementation
* in I2P for symmetric encryption.
* asymmetric encryption, signing, asymmetric key generation), as well as for symmetric
* encryption with AES.
* <p/>
* Because the first 6 bits are always zero for all currently existing subclasses, public
* and private keys produced by this class always start with an upper case A when

View File

@ -27,7 +27,7 @@ public class ECUtils {
ECPoint point,
boolean withCompression) {
org.bouncycastle.math.ec.ECPoint bcPoint = EC5Util.convertPoint(ecSpec, point, withCompression);
return bcPoint.getEncoded();
return bcPoint.getEncoded(withCompression);
}
public static ECPoint decodePoint(

View File

@ -55,7 +55,7 @@ public class ElGamal2048_DSA1024 extends AbstractCryptoImplementation {
@Override
public String getName() {
return Util._("2048-bit ElGamal Encryption");
return Util._t("2048-bit ElGamal Encryption");
}
@Override
@ -314,4 +314,4 @@ public class ElGamal2048_DSA1024 extends AbstractCryptoImplementation {
super(i2pPrivateKey, "DSA-1024");
}
}
}
}

View File

@ -112,7 +112,7 @@ public class NTRUEncrypt1087_GMSS512 extends AbstractCryptoImplementation {
@Override
public String getName() {
return Util._("NTRU-1087 Encryption");
return Util._t("NTRU-1087 Encryption");
}
@Override
@ -499,4 +499,4 @@ public class NTRUEncrypt1087_GMSS512 extends AbstractCryptoImplementation {
return Arrays.equals(getEncoded(), otherKey.getEncoded());
}
}
}
}

View File

@ -21,7 +21,7 @@
package i2p.bote.email;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.UniqueId;
import i2p.bote.crypto.CryptoFactory;
import i2p.bote.crypto.CryptoImplementation;
@ -469,7 +469,7 @@ public class Email extends MimeMessage {
try {
checkSender(address);
} catch (AddressException e) {
String errorMessage = _("Address doesn't contain an Email Destination or an external address: {0}", address);
String errorMessage = _t("Address doesn't contain an Email Destination or an external address: {0}", address);
log.debug(errorMessage, e);
throw new DataFormatException(errorMessage);
}
@ -481,7 +481,7 @@ public class Email extends MimeMessage {
try {
checkRecipient(address);
} catch (AddressException e) {
String errorMessage = _("Address doesn't contain an Email Destination or an external address: {0}", address);
String errorMessage = _t("Address doesn't contain an Email Destination or an external address: {0}", address);
log.debug(errorMessage, e);
throw new DataFormatException(errorMessage);
}
@ -503,7 +503,7 @@ public class Email extends MimeMessage {
// check for external address
// InternetAddress accepts addresses without a domain, so check that there is a '.' after the '@'
if (addr.indexOf('@') >= addr.indexOf('.'))
throw new AddressException(_("Invalid address: {0}", addr));
throw new AddressException(_t("Invalid address: {0}", addr));
}
}
/*
@ -1098,4 +1098,4 @@ public class Email extends MimeMessage {
}
return result.toString();
}
}
}

View File

@ -21,7 +21,7 @@
package i2p.bote.email;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.Configuration;
import i2p.bote.Util;
import i2p.bote.crypto.CryptoFactory;
@ -72,8 +72,8 @@ public class EmailIdentity extends EmailDestination {
if ("".equals(vanityPrefix))
vanityPrefix = null;
if (vanityPrefix!=null && !cryptoImpl.getBase64InitialCharacters().contains(vanityPrefix.substring(0, 1))) {
String errorMsg = "This encryption type does not support destinations that start with a \"{0}\". Valid initial characters are {1}.";
throw new IllegalDestinationParametersException(_(errorMsg, vanityPrefix.charAt(0), cryptoImpl.getBase64InitialCharacters()));
String errorMsg = "This encryption type does not support destinations that start with {0}. Valid initial characters are {1}.";
throw new IllegalDestinationParametersException(_t(errorMsg, vanityPrefix.charAt(0), cryptoImpl.getBase64InitialCharacters()));
}
KeyPair encryptionKeys;
@ -415,4 +415,4 @@ public class EmailIdentity extends EmailDestination {
}
}
}
}
}

View File

@ -399,6 +399,14 @@ public class EmailFolder extends Folder<Email> {
return numNew;
}
public Email getLatestUnreadEmail() throws PasswordException {
for (Email email : getElements()) {
if (email.isUnread())
return email;
}
return null;
}
public void setRecent(String messageId, boolean isRecent) throws PasswordException, GeneralSecurityException {
EmailMetadata metadata = getMetadata(messageId);
metadata.setRecent(isRecent);

View File

@ -21,7 +21,7 @@
package i2p.bote.imap;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.email.Email;
import i2p.bote.fileencryption.PasswordException;
import i2p.bote.folder.EmailFolder;
@ -97,7 +97,7 @@ public class BoteMailbox extends SimpleMailbox<String> {
messageMap.put(email, new BoteMessage(email, getFolderName()));
updateMessages();
} catch (PasswordException e) {
throw new RuntimeException(_("Password required or invalid password provided"), e);
throw new RuntimeException(_t("Password required or invalid password provided"), e);
}
}
@ -111,7 +111,7 @@ public class BoteMailbox extends SimpleMailbox<String> {
messageMap.put(email, new BoteMessage(email, getFolderName()));
updateMessages();
} catch (PasswordException e) {
throw new RuntimeException(_("Password required or invalid password provided"), e);
throw new RuntimeException(_t("Password required or invalid password provided"), e);
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();

View File

@ -31,7 +31,6 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@ -111,6 +110,9 @@ public class ImapService extends IMAPServer {
});
HierarchicalConfiguration cfg = new HierarchicalConfiguration();
// set address and port from config in order to avoid binding the default port.
cfg.setProperty("bind", configuration.getImapAddress() + ":" + configuration.getImapPort());
SSLSocketFactory sf = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket s = null;
try {
@ -133,8 +135,6 @@ public class ImapService extends IMAPServer {
}
configure(cfg); // use the defaults for the rest
setListenAddresses(new InetSocketAddress(configuration.getImapAddress(), configuration.getImapPort()));
mailboxSessionMapperFactory = new MapperFactory(folderManager);
MailboxACLResolver aclResolver = createMailboxACLResolver();
GroupMembershipResolver groupMembershipResolver = new GroupMembershipResolver() {

View File

@ -21,7 +21,7 @@
package i2p.bote.imap;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.folder.EmailFolder;
import i2p.bote.folder.EmailFolderManager;
@ -315,7 +315,7 @@ class MapperFactory extends MailboxSessionMapperFactory<String> {
@Override
public void delete(Mailbox<String> mailbox) throws MailboxException {
throw new MailboxException(_("Deletion of mailboxes is not currently supported."));
throw new MailboxException(_t("Deletion of mailboxes is not currently supported."));
}
@Override
@ -325,4 +325,4 @@ class MapperFactory extends MailboxSessionMapperFactory<String> {
}
};
}
}
}

View File

@ -96,7 +96,9 @@ class MigrateTo028 {
else
return true;
}
return firstLine.startsWith("Default=") || firstLine.startsWith("identity0.");
return firstLine.startsWith("Default=") ||
firstLine.startsWith("default=") ||
firstLine.startsWith("identity0.");
}
/**

View File

@ -34,6 +34,7 @@ import java.io.IOException;
import java.util.List;
import net.i2p.util.Log;
import net.i2p.util.VersionComparator;
public class Migrator {
private Log log = new Log(Migrator.class);
@ -47,47 +48,59 @@ public class Migrator {
lastMigrationVersion = getLastSuccessfulMigration();
log.debug("Last migration was to version <" + lastMigrationVersion + ">. Current version is <" + currentVersion + ">.");
}
/**
* Migrates files that are not encrypted, or encrypted with the default password.
*/
public void migrateNonPasswordedDataIfNeeded() {
if (lastMigrationVersion.compareTo(currentVersion) >= 0) {
if (VersionComparator.comp(lastMigrationVersion, currentVersion) >= 0) {
log.debug("No plaintext migration needed.");
return;
}
try {
if (lastMigrationVersion.compareTo("0.2.6") < 0)
boolean migrationSucceeded = true;
if (VersionComparator.comp(lastMigrationVersion, "0.2.6") < 0)
new MigrateTo026().migrateIfNeeded(configuration);
new MigrateTo027().migrateIfNeeded(configuration);
PasswordCache defaultPasswordHolder = new PasswordCache(configuration);
try {
new MigrateTo028().migrateIfNeeded(configuration, defaultPasswordHolder);
} catch (PasswordException e) {
log.debug("Non-default password in use, deferring migration of encrypted files to after password entry");
if (VersionComparator.comp(lastMigrationVersion, "0.2.7") < 0)
new MigrateTo027().migrateIfNeeded(configuration);
if (VersionComparator.comp(lastMigrationVersion, "0.2.8") < 0) {
PasswordCache defaultPasswordHolder = new PasswordCache(configuration);
try {
new MigrateTo028().migrateIfNeeded(configuration, defaultPasswordHolder);
} catch (PasswordException e) {
log.debug("Non-default password in use, deferring migration of encrypted files to after password entry");
migrationSucceeded = false;
}
}
if (migrationSucceeded) {
log.debug("Migration successful, setting last successful migration to <" + currentVersion + ">.");
setLastSuccessfulMigration(currentVersion);
}
}
catch (Exception e) {
log.error("Error migrating to the latest version.", e);
}
}
/**
* Migrates password-protected files. This method assumes it is
* called after {@link #migrateNonPasswordedDataIfNeeded()}.
* @param passwordHolder
*/
public void migratePasswordedDataIfNeeded(PasswordHolder passwordHolder) {
if (lastMigrationVersion.compareTo(currentVersion) >= 0) {
if (VersionComparator.comp(lastMigrationVersion, currentVersion) >= 0) {
log.debug("No encrypted-file migration needed.");
return;
}
try {
new MigrateTo028().migrateIfNeeded(configuration, passwordHolder);
if (VersionComparator.comp(lastMigrationVersion, "0.2.8") < 0)
new MigrateTo028().migrateIfNeeded(configuration, passwordHolder);
// we're assuming migrateNonPasswordedDataIfNeeded() ran already
log.debug("Encrypted-file migration successful, setting last successful migration to <" + currentVersion + ">.");
setLastSuccessfulMigration(currentVersion);
@ -96,7 +109,7 @@ public class Migrator {
log.error("Error migrating to the latest version.", e);
}
}
/**
* Returns the version to which the I2P-Bote data directory was last migrated to.
* If there has never been a migration, zero is returned.
@ -105,14 +118,14 @@ public class Migrator {
File versionFile = configuration.getMigrationVersionFile();
if (!versionFile.exists())
return "0";
List<String> lines = Util.readLines(versionFile);
if (lines.isEmpty())
return "0";
return lines.get(0);
}
/**
* Writes the version to which the I2P-Bote data directory was last migrated to,
* to a file.

View File

@ -21,7 +21,7 @@
package i2p.bote.network;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.packet.I2PBotePacket;
import java.util.ArrayList;
@ -77,6 +77,6 @@ public class BanList {
if (packet.isProtocolVersionOk())
unban(peer);
else
ban(peer, _("Wrong protocol version:") + " " + packet.getProtocolVersion());
ban(peer, _t("Wrong protocol version:") + " " + packet.getProtocolVersion());
}
}
}

View File

@ -22,11 +22,10 @@
package i2p.bote.network.kademlia;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import net.i2p.data.Destination;
import net.i2p.data.Hash;
@ -46,7 +45,7 @@ abstract class AbstractBucket implements Iterable<KademliaPeer> {
protected int capacity;
public AbstractBucket(int capacity) {
peers = Collections.synchronizedList(new ArrayList<KademliaPeer>());
peers = new CopyOnWriteArrayList<KademliaPeer>();
this.capacity = capacity;
}

View File

@ -39,6 +39,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
@ -135,8 +136,11 @@ public class ClosestNodesLookupTask implements Callable<List<Destination>> {
TimeUnit.SECONDS.sleep(1);
} while (!isDone());
log.debug("Node lookup for " + key + " found " + responses.size() + " nodes (may include local node).");
for (Destination node: responses)
log.debug(" Node: " + Util.toBase32(node));
synchronized (responses) {
Iterator<Destination> i = responses.iterator();
while (i.hasNext())
log.debug(" Node: " + Util.toBase32(i.next()));
}
}
finally {
i2pReceiver.removePacketListener(packetListener);
@ -207,10 +211,13 @@ public class ClosestNodesLookupTask implements Callable<List<Destination>> {
*/
private List<Destination> getResults() {
List<Destination> resultsList = new ArrayList<Destination>();
for (Destination destination: responses) {
resultsList.add(destination);
if (resultsList.size() >= K)
break;
synchronized (responses) {
Iterator<Destination> i = responses.iterator();
while (i.hasNext()) {
resultsList.add(i.next());
if (resultsList.size() >= K)
break;
}
}
return resultsList;
}

View File

@ -21,7 +21,7 @@
package i2p.bote.network.kademlia;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.I2PBote;
import i2p.bote.Util;
import i2p.bote.network.DhtPeerStats;
@ -44,7 +44,7 @@ class KademliaPeerStats implements DhtPeerStats {
private List<List<String>> data;
KademliaPeerStats(SBucket sBucket, List<KBucket> kBuckets, Hash localDestinationHash) {
String[] headerArray = new String[] {_("Peer"), _("I2P Destination"), _("BktPfx"), _("Distance"), _("Locked?"), _("First Seen")};
String[] headerArray = new String[] {_t("Peer"), _t("I2P Destination"), _t("BktPfx"), _t("Distance"), _t("Locked?"), _t("First Seen")};
header = Arrays.asList(headerArray);
data = new ArrayList<List<String>>();
@ -64,7 +64,7 @@ class KademliaPeerStats implements DhtPeerStats {
row.add(getBucketPrefix(bucket));
BigInteger distance = KademliaUtil.getDistance(localDestinationHash, peer.calculateHash());
row.add(distance.shiftRight((Hash.HASH_LENGTH-2)*8).toString()); // show the 2 most significant bytes
row.add(String.valueOf(peer.isLocked() ? _("Yes")+"("+(peer.getConsecTimeouts())+")" : _("No")));
row.add(String.valueOf(peer.isLocked() ? _t("Yes")+"("+(peer.getConsecTimeouts())+")" : _t("No")));
String firstSeen = formatter.format(peer.getFirstSeen());
row.add(String.valueOf(firstSeen));
data.add(row);
@ -81,12 +81,12 @@ class KademliaPeerStats implements DhtPeerStats {
KBucket kBucket = (KBucket)bucket;
String prefix = kBucket.getBucketPrefix();
if (prefix.isEmpty())
return _("(None)");
return _t("(None)");
else
return prefix;
}
else
return _("(S)");
return _t("(S)");
}
@Override
@ -98,4 +98,4 @@ class KademliaPeerStats implements DhtPeerStats {
public List<List<String>> getData() {
return data;
}
}
}

View File

@ -81,6 +81,17 @@ public abstract class CommunicationPacket extends I2PBotePacket {
* @throws MalformedPacketException
*/
public static CommunicationPacket createPacket(byte[] data) throws MalformedPacketException {
if (data == null) {
Log log = new Log(CommunicationPacket.class);
log.error("Packet data is null");
return null;
}
if (data.length < HEADER_LENGTH) {
Log log = new Log(CommunicationPacket.class);
log.error("Packet is too short to be a CommunicationPacket");
return null;
}
char packetTypeCode = (char)data[4]; // byte 4 of a communication packet is the packet type code
Class<? extends I2PBotePacket> packetType = decodePacketTypeCode(packetTypeCode);
if (packetType==null || !CommunicationPacket.class.isAssignableFrom(packetType)) {
@ -118,6 +129,8 @@ public abstract class CommunicationPacket extends I2PBotePacket {
* @param packet
*/
static boolean isPrefixValid(byte[] packet) {
if (packet == null || packet.length < PACKET_PREFIX.length)
return false;
for (int i=0; i<PACKET_PREFIX.length; i++)
if (packet[i] != PACKET_PREFIX[i])
return false;

View File

@ -90,6 +90,11 @@ public abstract class DataPacket extends I2PBotePacket {
* @throws MalformedPacketException If the byte array does not contain a valid <code>DataPacket</code>.
*/
public static DataPacket createPacket(byte[] data) throws MalformedPacketException {
if (data == null)
throw new MalformedPacketException("Packet data is null");
if (data.length < HEADER_LENGTH)
throw new MalformedPacketException("Packet is too short to be a DataPacket");
char packetTypeCode = (char)data[0]; // first byte of a data packet is the packet type code
Class<? extends I2PBotePacket> packetType = decodePacketTypeCode(packetTypeCode);
if (packetType==null || !DataPacket.class.isAssignableFrom(packetType))

View File

@ -38,6 +38,7 @@ import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
@ -193,14 +194,18 @@ public class EmailChecker extends I2PAppThread {
private synchronized void updatePendingTasks() {
try {
for (Map.Entry<EmailIdentity, Future<Boolean>> entry: pendingMailCheckTasks.entrySet()) {
try {
boolean newMailForIdentity = entry.getValue().get(1, TimeUnit.MILLISECONDS);
pendingMailCheckTasks.remove(entry.getKey());
if (newMailForIdentity)
newMailReceived = true;
} catch (TimeoutException e) {
log.debug("CheckEmailTask not finished for Identity " + entry.getKey());
synchronized (pendingMailCheckTasks) {
Iterator<Map.Entry<EmailIdentity, Future<Boolean>>> iter = pendingMailCheckTasks.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<EmailIdentity, Future<Boolean>> entry = iter.next();
try {
boolean newMailForIdentity = entry.getValue().get(1, TimeUnit.MILLISECONDS);
iter.remove();
if (newMailForIdentity)
newMailReceived = true;
} catch (TimeoutException e) {
log.debug("CheckEmailTask not finished for Identity " + entry.getKey());
}
}
}
} catch (InterruptedException e) {

View File

@ -55,12 +55,15 @@ import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.mail.Address;
import javax.mail.MessagingException;
import net.i2p.data.Destination;
import net.i2p.util.Log;
import net.i2p.util.RandomSource;
import net.i2p.util.SystemVersion;
/**
* General helper functions used by all UIs.
@ -68,6 +71,27 @@ import net.i2p.util.RandomSource;
public class GeneralHelper {
private static AddressDisplayFilter ADDRESS_DISPLAY_FILTER;
private static GeneralHelper instance;
private static final boolean _isUnlimited;
// TODO: Remove this and bump min-i2p-version to 0.9.23
static {
boolean unlimited = false;
try {
unlimited = Cipher.getMaxAllowedKeyLength("AES") >= 256;
} catch (GeneralSecurityException gse) {
// a NoSuchAlgorithmException
} catch (NoSuchMethodError nsme) {
// JamVM, gij
try {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec key = new SecretKeySpec(new byte[32], "AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
unlimited = true;
} catch (GeneralSecurityException gse) {
}
}
_isUnlimited = unlimited;
}
public GeneralHelper() {
}
@ -98,7 +122,7 @@ public class GeneralHelper {
Destination dest = I2PBote.getInstance().getLocalDestination();
if (dest != null)
return Util.toBase32(dest);
return Util._("Not set.");
return Util._t("Not set.");
}
/**
@ -148,7 +172,7 @@ public class GeneralHelper {
if (createNew) {
CryptoImplementation cryptoImpl = CryptoFactory.getInstance(cryptoImplId);
if (cryptoImpl == null) {
String errorMsg = Util._("Invalid ID number for CryptoImplementation: " + cryptoImplId);
String errorMsg = Util._t("Invalid ID number for CryptoImplementation: " + cryptoImplId);
log.error(errorMsg);
throw new IllegalArgumentException(errorMsg);
}
@ -482,6 +506,13 @@ public class GeneralHelper {
else return I2PBote.getInstance().getIdentities().contains(destination);
}
public static String machineDateFormat() {
if (SystemVersion.isJava7() && !SystemVersion.isAndroid())
return "yyyy-MM-dd HH:mmXXX";
else
return "yyyy-MM-dd HH:mmZZZZZ";
}
public static String getNameAndDestination(String address) throws PasswordException, IOException, GeneralSecurityException {
return getAddressDisplayFilter().getNameAndDestination(address);
}
@ -584,4 +615,12 @@ public class GeneralHelper {
public static String getFileSize(String filename) {
return Util.getHumanReadableSize(new File(filename));
}
public boolean getRequiredCryptoStrengthSatisfied() {
return _isUnlimited;
}
public String getJREHome() {
return System.getProperty("java.home");
}
}

View File

@ -0,0 +1,78 @@
package i2p.bote.web;
import net.i2p.util.Log;
import org.owasp.csrfguard.log.ILogger;
import org.owasp.csrfguard.log.LogLevel;
public class CSRFLogger implements ILogger {
private static final long serialVersionUID = -4857601483759096198L;
private static final Log LOGGER = new Log(CSRFLogger.class);
@Override
public void log(String msg) {
LOGGER.info(msg.replaceAll("(\\r|\\n)", ""));
}
@Override
public void log(LogLevel level, String msg) {
// Remove CR and LF characters to prevent CRLF injection
String sanitizedMsg = msg.replaceAll("(\\r|\\n)", "");
switch(level) {
case Trace:
LOGGER.debug(sanitizedMsg);
break;
case Debug:
LOGGER.debug(sanitizedMsg);
break;
case Info:
LOGGER.info(sanitizedMsg);
break;
case Warning:
LOGGER.warn(sanitizedMsg);
break;
case Error:
LOGGER.error(sanitizedMsg);
break;
case Fatal:
LOGGER.log(Log.CRIT, sanitizedMsg);
break;
default:
throw new RuntimeException("unsupported log level " + level);
}
}
@Override
public void log(Exception exception) {
LOGGER.warn(exception.getLocalizedMessage(), exception);
}
@Override
public void log(LogLevel level, Exception exception) {
switch(level) {
case Trace:
LOGGER.debug(exception.getLocalizedMessage(), exception);
break;
case Debug:
LOGGER.debug(exception.getLocalizedMessage(), exception);
break;
case Info:
LOGGER.info(exception.getLocalizedMessage(), exception);
break;
case Warning:
LOGGER.warn(exception.getLocalizedMessage(), exception);
break;
case Error:
LOGGER.error(exception.getLocalizedMessage(), exception);
break;
case Fatal:
LOGGER.log(Log.CRIT, exception.getLocalizedMessage(), exception);
break;
default:
throw new RuntimeException("unsupported log level " + level);
}
}
}

View File

@ -21,15 +21,19 @@
package i2p.bote.web;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.I2PBote;
import i2p.bote.email.Email;
import i2p.bote.fileencryption.PasswordException;
import i2p.bote.folder.Outbox.EmailStatus;
import i2p.bote.util.GeneralHelper;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@ -39,6 +43,7 @@ import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import javax.mail.MessagingException;
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
@ -51,8 +56,31 @@ import net.i2p.util.Translate;
* and serves as a bean for JSPs.
*/
public class JSPHelper extends GeneralHelper {
private static final String CONSOLE_BUNDLE_NAME = "net.i2p.router.web.messages";
private static final String RECIPIENT_KEY_PREFIX = "nofilter_recipient";
/**
* @since 0.4.4
*/
public static String csrfErrorMsg() {
I2PAppContext ctx = I2PAppContext.getGlobalContext();
return "<p>" + consoleGetString(
"Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.",
ctx
) + "</p><p>" + consoleGetString(
"If the problem persists, verify that you have cookies enabled in your browser.",
ctx
) + "</p>";
}
/**
* Translate with the console bundle.
* @since 0.4.4
*/
private static String consoleGetString(String s, I2PAppContext ctx) {
return Translate.getString(s, ctx, CONSOLE_BUNDLE_NAME);
}
/**
* Returns a new <code>SortedMap<String, String></code> that contains only those
* entries from the original map whose key is <code>"nofilter_recipient"</code>,
@ -233,29 +261,48 @@ public class JSPHelper extends GeneralHelper {
EmailStatus emailStatus = getEmailStatus(email);
switch (emailStatus.getStatus()) {
case QUEUED:
return _("Queued");
return _t("Queued");
case SENDING:
return _("Sending");
return _t("Sending");
case SENT_TO:
return _("Sent to {0} out of {1} recipients",
return _t("Sent to {0} out of {1} recipients",
emailStatus.getParam1(), emailStatus.getParam2());
case EMAIL_SENT:
return _("Email sent");
return _t("Email sent");
case GATEWAY_DISABLED:
return _("Gateway disabled");
return _t("Gateway disabled");
case NO_IDENTITY_MATCHES:
return _("No identity matches the sender/from field: {0}",
return _t("No identity matches the sender/from field: {0}",
emailStatus.getParam1());
case INVALID_RECIPIENT:
return _("Invalid recipient address: {0}", emailStatus.getParam1());
return _t("Invalid recipient address: {0}", emailStatus.getParam1());
case ERROR_CREATING_PACKETS:
return _("Error creating email packets: {0}", emailStatus.getParam1());
return _t("Error creating email packets: {0}", emailStatus.getParam1());
case ERROR_SENDING:
return _("Error while sending email: {0}", emailStatus.getParam1());
return _t("Error while sending email: {0}", emailStatus.getParam1());
case ERROR_SAVING_METADATA:
return _("Error saving email metadata: {0}", emailStatus.getParam1());
return _t("Error saving email metadata: {0}", emailStatus.getParam1());
default:
return "";
}
}
}
public String getNewEmailNotificationContent() {
String title = "I2P-Bote";
String body = "";
try {
Email email = I2PBote.getInstance().getInbox().getLatestUnreadEmail();
if (email != null) {
title = "I2P-Bote: " + getNameAndShortDestination(email.getOneFromAddress());
body = email.getSubject();
}
} catch (PasswordException e) {
} catch (MessagingException e) {
} catch (IOException e) {
} catch (GeneralSecurityException e) {
}
if (body == "")
body = _t("New email received");
return "<script>\nnotifTitle=\"" + title + "\";\nnotifBody=\"" + body + "\";\n</script>";
}
}

View File

@ -77,7 +77,7 @@ public class MessageTag extends BodyTagSupport {
if (hide && I2PBote.getInstance().getConfiguration().getHideLocale())
translation = key;
else
translation = Util._(key);
translation = Util._t(key);
// replace {0}, {1},... with param values
do {
@ -183,4 +183,4 @@ public class MessageTag extends BodyTagSupport {
void addParameter(String param) {
parameters.add(param);
}
}
}

View File

@ -22,7 +22,7 @@
package i2p.bote.web;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.I2PBote;
import i2p.bote.Util;
import i2p.bote.network.BannedPeer;
@ -85,7 +85,7 @@ public class PeerInfoTag extends SimpleTagSupport {
out.println("</div>");
out.println("<br>");
out.println("<span class=\"subheading\">" + _("Kademlia Peers:") + " " + numDhtPeers + "</span>");
out.println("<span class=\"subheading\">" + _t("Kademlia Peers:") + " " + numDhtPeers + "</span>");
if (numDhtPeers > 0) {
out.println("<table");
@ -109,13 +109,13 @@ public class PeerInfoTag extends SimpleTagSupport {
out.println("<br/>");
// Print relay peer info
out.println("<span class=\"subheading\">" + _("Relay Peers:") + " " + relayPeers.length + "</span>");
out.println("<span class=\"subheading\">" + _t("Relay Peers:") + " " + relayPeers.length + "</span>");
if (relayPeers.length > 0) {
out.println("<table");
out.println("<tr>");
out.println("<th>" + _("Peer") + "</th>");
out.println("<th>" + _("I2P Destination") + "</th>");
out.println("<th>" + _("Reachability %") + "</th>");
out.println("<th>" + _t("Peer") + "</th>");
out.println("<th>" + _t("I2P Destination") + "</th>");
out.println("<th>" + _t("Reachability %") + "</th>");
out.println("</tr>");
int i = 1;
@ -124,7 +124,7 @@ public class PeerInfoTag extends SimpleTagSupport {
out.println("<td>" + i + "</td>");
out.println("<td class=\"ellipsis\">" + Util.toBase32(peer) + "</td>");
int reachability = peer.getReachability();
out.println("<td>" + (reachability == 0 ? _("Untested") : reachability) + "</td>");
out.println("<td>" + (reachability == 0 ? _t("Untested") : reachability) + "</td>");
out.println("</tr>");
i++;
}
@ -135,13 +135,13 @@ public class PeerInfoTag extends SimpleTagSupport {
// List banned peers
Collection<BannedPeer> bannedPeers = I2PBote.getInstance().getBannedPeers();
out.println("<span class=\"subheading\">" + _("Banned Peers:") + " " + bannedPeers.size() + "</span>");
out.println("<span class=\"subheading\">" + _t("Banned Peers:") + " " + bannedPeers.size() + "</span>");
if (bannedPeers.size() > 0) {
out.println("<table>");
out.println("<tr>");
out.println("<th>" + _("Peer") + "</th>");
out.println("<th>" + _("Destination Hash") + "</th>");
out.println("<th>" + _("Ban Reason") + "</th>");
out.println("<th>" + _t("Peer") + "</th>");
out.println("<th>" + _t("Destination Hash") + "</th>");
out.println("<th>" + _t("Ban Reason") + "</th>");
out.println("</tr>");
int peerIndex = 1;
@ -172,26 +172,26 @@ public class PeerInfoTag extends SimpleTagSupport {
} else {
int reachable = 0;
for (List<String> row : dhtStats.getData()) {
if (_("No").equals(row.get(4)))
if (_t("No").equals(row.get(4)))
reachable += 1;
}
int unreachable = numDhtPeers - reachable;
DefaultPieDataset dataset = new DefaultPieDataset();
if (reachable > 0)
dataset.setValue(_("Reachable"), reachable);
dataset.setValue(_t("Reachable"), reachable);
if (unreachable > 0)
dataset.setValue(_("Unreachable"), unreachable);
dataset.setValue(_t("Unreachable"), unreachable);
plot = new RingPlot(dataset);
plot.setSectionPaint(_("Reachable"), Color.green);
plot.setSectionPaint(_("Unreachable"), Color.red);
plot.setSectionPaint(_t("Reachable"), Color.green);
plot.setSectionPaint(_t("Unreachable"), Color.red);
}
plot.setLabelGenerator(null);
plot.setShadowGenerator(null);
JFreeChart dhtChart = new JFreeChart(
_("Kademlia Peers:"), JFreeChart.DEFAULT_TITLE_FONT,
_t("Kademlia Peers:"), JFreeChart.DEFAULT_TITLE_FONT,
plot, numDhtPeers == 0 ? false : true);
return ServletUtilities.saveChartAsPNG(dhtChart, 400, 300, null);
}
@ -218,23 +218,23 @@ public class PeerInfoTag extends SimpleTagSupport {
DefaultPieDataset dataset = new DefaultPieDataset();
if (good > 0)
dataset.setValue(_("Good"), good);
dataset.setValue(_t("Good"), good);
if (bad > 0)
dataset.setValue(_("Unreliable"), bad);
dataset.setValue(_t("Unreliable"), bad);
if (untested > 0)
dataset.setValue(_("Untested"), untested);
dataset.setValue(_t("Untested"), untested);
plot = new RingPlot(dataset);
plot.setSectionPaint(_("Good"), Color.green);
plot.setSectionPaint(_("Unreliable"), Color.red);
plot.setSectionPaint(_("Untested"), Color.orange);
plot.setSectionPaint(_t("Good"), Color.green);
plot.setSectionPaint(_t("Unreliable"), Color.red);
plot.setSectionPaint(_t("Untested"), Color.orange);
}
plot.setLabelGenerator(null);
plot.setShadowGenerator(null);
JFreeChart chart = new JFreeChart(
_("Relay Peers:"), JFreeChart.DEFAULT_TITLE_FONT,
_t("Relay Peers:"), JFreeChart.DEFAULT_TITLE_FONT,
plot, relayPeers.length == 0 ? false : true);
return ServletUtilities.saveChartAsPNG(chart, 400, 300, null);
}
}
}

View File

@ -0,0 +1,63 @@
package i2p.bote.web;
import net.i2p.util.Log;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SameOriginFilter implements Filter {
private static final Log log = new Log(SameOriginFilter.class);
@Override
public void init(FilterConfig config) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain next) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
String name = req.getServerName();
String origin = getHost(req, "Origin");
String referer = getHost(req, "Referer");
if ((!"POST".equals(req.getMethod())) ||
rewriteLocalhost(name).equals(rewriteLocalhost(origin)) ||
rewriteLocalhost(name).equals(rewriteLocalhost(referer))) {
next.doFilter(request, response);
} else {
log.warn(
"Potential cross-site attack thwarted (server name: " + name + ", origin: " + origin + ", referer: " + referer + ")"
);
}
((HttpServletResponse)response).addHeader("X-Frame-Options", "SAMEORIGIN");
}
private String getHost(HttpServletRequest request, String header) {
String val = request.getHeader(header);
if (val == null) {
return null;
}
try {
URL url = new URL(val);
return url.getHost();
} catch (MalformedURLException e) {
return null;
}
}
private String rewriteLocalhost(String host) {
return ("127.0.0.1".equals(host) || "[::1]".equals(host)) ? "localhost" : host;
}
@Override
public void destroy() {
}
}

View File

@ -21,7 +21,7 @@
package i2p.bote.web;
import static i2p.bote.Util._;
import static i2p.bote.Util._t;
import i2p.bote.I2PBote;
import i2p.bote.email.Attachment;
import i2p.bote.email.Email;
@ -70,7 +70,7 @@ public class SendEmailTag extends BodyTagSupport {
Email email = new Email(includeSentTime);
String statusMessage;
if (recipients.isEmpty())
statusMessage = _("Error: Please add at least one recipient.");
statusMessage = _t("Error: Please add at least one recipient.");
else
try {
// set addresses
@ -98,13 +98,13 @@ public class SendEmailTag extends BodyTagSupport {
log.error("Can't clean up attachment: <" + attachment + ">");
}
statusMessage = _("The email has been queued for sending.");
statusMessage = _t("The email has been queued for sending.");
}
catch (PasswordException e) {
throw new JspException(e);
}
catch (Exception e) {
statusMessage = _("Error sending email: {0}", e.getLocalizedMessage());
statusMessage = _t("Error sending email: {0}", e.getLocalizedMessage());
log.error("Error sending email", e);
}
@ -170,4 +170,4 @@ public class SendEmailTag extends BodyTagSupport {
this.address = address;
}
}
}
}

View File

@ -0,0 +1,29 @@
org.owasp.csrfguard.Logger=i2p.bote.web.CSRFLogger
org.owasp.csrfguard.configuration.provider.factory=org.owasp.csrfguard.config.PropertiesConfigurationProviderFactory
org.owasp.csrfguard.Enabled = true
org.owasp.csrfguard.ValidateWhenNoSessionExists = true
org.owasp.csrfguard.UnprotectedMethods=GET
org.owasp.csrfguard.TokenPerPage=true
org.owasp.csrfguard.TokenPerPagePrecreate=false
org.owasp.csrfguard.Rotate=true
org.owasp.csrfguard.Ajax=false
org.owasp.csrfguard.unprotected.IndexHtml=%servletContext%/index.html
org.owasp.csrfguard.unprotected.Html=%servletContext%/html/*
org.owasp.csrfguard.unprotected.Themes=%servletContext%/themes/*
org.owasp.csrfguard.unprotected.ExtThemes=%servletContext%/externalThemes/*
org.owasp.csrfguard.action.Log=org.owasp.csrfguard.action.Log
org.owasp.csrfguard.action.Log.Message=potential cross-site request forgery (CSRF) attack thwarted (user:%user%, ip:%remote_ip%, method:%request_method%, uri:%request_uri%, error:%exception_message%)
org.owasp.csrfguard.action.Redirect=org.owasp.csrfguard.action.Redirect
org.owasp.csrfguard.action.Redirect.Page=%servletContext%/csrfError.jsp
org.owasp.csrfguard.action.Rotate=org.owasp.csrfguard.action.Rotate
org.owasp.csrfguard.TokenName=csrfToken
org.owasp.csrfguard.SessionKey=OWASP_CSRFTOKEN
org.owasp.csrfguard.TokenLength=32
org.owasp.csrfguard.PRNG=SHA1PRNG
org.owasp.csrfguard.PRNG.Provider=SUN

View File

@ -22,6 +22,7 @@
<%@ attribute name="address" required="true" description="The email address to display" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
@ -33,7 +34,7 @@
<c:set var="emailDestination" value="${ib:extractEmailDestination(address)}"/>
<c:set var="name" value="${ib:extractName(address)}"/>
<form action="editContact.jsp" method="POST">
<csrf:form action="editContact.jsp" method="POST">
<input type="hidden" name="new" value="true"/>
<input type="hidden" name="destination" value="${emailDestination}"/>
<input type="hidden" name="name" value="${ib:escapeQuotes(name)}"/>
@ -70,5 +71,5 @@
</c:if>
</ib:expandable>
</c:if>
</form>
</div>
</csrf:form>
</div>

View File

@ -40,7 +40,7 @@
<c:if test="${empty type}">
<c:set var="type" value="both"/>
</c:if>
<fmt:formatDate value="${date}" var="datestr" type="${type}" pattern="yyyy-MM-dd HH:mmX"/>
<fmt:formatDate value="${date}" var="datestr" type="${type}" pattern="${ib:machineDateFormat()}"/>
<fmt:formatDate value="${date}" var="date" type="${type}" timeStyle="${timeStyle}"/>
</c:if>
<c:if test="${empty date and printUnknown eq true}">

View File

@ -366,6 +366,17 @@
<body-content>empty</body-content>
</tag>
<function>
<name>csrfErrorMsg</name>
<description>
Returns the CSRF error message.
</description>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
java.lang.String csrfErrorMsg()
</function-signature>
</function>
<function>
<name>createOrModifyIdentity</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
@ -637,6 +648,17 @@
</function-signature>
</function>
<function>
<name>machineDateFormat</name>
<description>
Returns a machine-readable Date format string.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String machineDateFormat()
</function-signature>
</function>
<function>
<name>tryPassword</name>
<description>
@ -738,4 +760,4 @@
<path>/WEB-INF/tags/expandable.tag</path>
</tag-file>
</taglib>
</taglib>

View File

@ -12,7 +12,21 @@
<listener>
<listener-class>i2p.bote.web.ServiceInitializer</listener-class>
</listener>
<listener>
<listener-class>org.owasp.csrfguard.CsrfGuardServletContextListener</listener-class>
</listener>
<listener>
<listener-class>org.owasp.csrfguard.CsrfGuardHttpSessionListener</listener-class>
</listener>
<filter>
<filter-name>SameOriginFilter</filter-name>
<filter-class>i2p.bote.web.SameOriginFilter</filter-class>
</filter>
<filter>
<filter-name>CSRFGuard</filter-name>
<filter-class>org.owasp.csrfguard.CsrfGuardFilter</filter-class>
</filter>
<filter>
<filter-name>XSSFilter</filter-name>
<filter-class>net.i2p.servlet.filters.XSSFilter</filter-class>
@ -44,6 +58,14 @@
</init-param>
</filter>
<filter-mapping>
<filter-name>SameOriginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CSRFGuard</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>XSSFilter</filter-name>
<url-pattern>/*</url-pattern>
@ -102,4 +124,4 @@
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/displayChart</url-pattern>
</servlet-mapping>
</web-app>
</web-app>

View File

@ -35,21 +35,26 @@
</ib:message>
</h2>
<p><ib:message key="To submit bug reports or feature requests:"/> <a href="http://trac.i2p2.i2p/newticket?component=apps/plugins&keywords=I2P-Bote"><ib:message key="click here"/></a>.</p>
<p><ib:message key="To submit bug reports or feature requests:"/> <a href="http://trac.i2p2.i2p/newticket?component=apps/plugins&keywords=I2P-Bote&owner=str4d"><ib:message key="click here"/></a>.</p>
<div class="contributor-category"><ib:message key="Developers:"/></div>
<div>
<div class="contributor-name">
<ib:message key="Click to send an email" var="linkTitle"/>
<a href="newEmail.jsp?nofilter_recipient0=TzKO~FlShiQEOPkPn7eIOkxqBy6pGxk1NDkVLLwzGk~kNPwo8qvHoyk4vKOZVZNGklsU7iOndYeQofMZtADm5yqbUxhogTmxyu7VcNsw6mXBub26FAUEQADf4Uj4Ph0dGAMyPbWzDEFUibdJyjpLYS9AaHgf~EU8B49DP8rpkh8d0T&amp;recipientType0=to&amp;subject=${subject}" title="${linkTitle}">str4d</a>
</div>
<div class="contributor-role"><ib:message key="Maintenance, user experience, extended features, Android app"/></div>
</div>
<br/>
<div class="contributor-category"><ib:message key="Past developers:"/></div>
<div>
<div class="contributor-name">
<ib:message key="Feedback on I2P-Bote" var="subject"/>
<a href="newEmail.jsp?nofilter_recipient0=hobo37SEJsEMfQHwcpVlvEgnrERGFz34GC1yjVyuRvl1QHnTi0UAoOtrLP~qkFY0oL59BBqj5sCep0RA8I5G8n&amp;recipientType0=to&amp;subject=${subject}" title="${linkTitle}">HungryHobo</a>
</div>
<div class="contributor-role"><ib:message key="Technical concept, implementation, user interface"/></div>
</div>
<div>
<div class="contributor-name">str4d</div>
<div class="contributor-role"><ib:message key="User experience, extended features, Android app"/></div>
</div>
<br/>
<div class="contributor-category"><ib:message key="Contributors:"/></div>
@ -149,5 +154,17 @@
<div class="contributor-name">KillYourTV</div>
<div class="contributor-role"><ib:message key="Code fixes, translation updates from tx"/></div>
</div>
<div>
<div class="contributor-name">kay</div>
<div class="contributor-role"><ib:message key="Code fixes"/></div>
</div>
<div>
<div class="contributor-name">Jonathan Cross</div>
<div class="contributor-role"><ib:message key="Usability improvement"/></div>
</div>
<div>
<div class="contributor-name">Beardog</div>
<div class="contributor-role"><ib:message key="Bug hunting"/></div>
</div>
<jsp:include page="footer.jsp"/>

View File

@ -28,6 +28,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
@ -49,6 +50,7 @@
<c:if test="${param.select}">
<form action="${param.forwardUrl}" method="POST">
<input type="hidden" name="<csrf:tokenname/>" value="<csrf:tokenvalue uri='${param.forwardUrl}'/>"/>
<ib:copyParams paramsToCopy="${param.nofilter_paramsToCopy}"/>
</c:if>
@ -57,6 +59,7 @@
<tr>
<c:if test="${param.select}"><th class="header-column-check"></th></c:if>
<th class="header-column-name"><ib:message key="Name"/></th>
<th class="header-column-text"><ib:message key="Text"/></th>
<th class="header-column-addr-email-dest"><ib:message key="Email Destination"/></th>
<c:if test="${not param.select}"><th class="header-column-trash"></th></c:if>
</tr>
@ -84,6 +87,9 @@
</a>
</c:if>
</td>
<td>
${fn:escapeXml(contact.text)}
</td>
<td class="ellipsis">
${contact.destination}
</td>
@ -100,10 +106,10 @@
<table>
<c:if test="${!param.select}">
<tr><td>
<form action="editContact.jsp" method="POST">
<csrf:form action="editContact.jsp" method="POST">
<input type="hidden" name="createNew" value="true"/>
<button type="submit" value="New"><ib:message key="New Contact"/></button>
</form>
</csrf:form>
</td></tr>
</c:if>
<c:if test="${param.select}">
@ -125,13 +131,13 @@
<c:if test="${not param.select}">
<p/><br/>
<b><ib:message key="Import from the public address directory"/></b><br/>
<form action="importContact.jsp" method="POST">
<csrf:form action="importContact.jsp" method="POST">
<ib:message key="Name:"/>
<input type="text" name="name"/>
<button type="submit"><ib:message key="Lookup"/></button>
</form><br/>
</csrf:form><br/>
Note that only exact matches are found.
</c:if>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -24,11 +24,12 @@
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:include page="getStatus.jsp"/>
<c:if test="${param.checkMail eq 1}">
<c:if test="${pageContext.request.method eq 'POST' and param.checkMail eq 1}">
<ib:requirePassword forwardUrl="checkMail.jsp">
<ib:checkForMail/>
</ib:requirePassword>
@ -43,7 +44,7 @@
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="themes/${jspHelperBean.configuration.theme}/i2pbote.css" />
<link rel="stylesheet" href="themes/${jspHelperBean.configuration.theme}/i2pbote.css?v=${jspHelperBean.appVersion}" />
<%-- Refresh until the Check Mail button becomes ungreyed --%>
<c:if test="${checkingForMail or connStatus eq NOT_STARTED or connStatus eq DELAY}">
@ -60,11 +61,11 @@
</c:if>
<c:if test="${!checkingForMail}">
<div class="checkmail">
<c:set var="frame" value=""/>
<c:set var="frame" value="_self"/>
<c:choose>
<c:when test="${jspHelperBean.identities.none}">
<c:set var="url" value="noIdentities.jsp"/>
<c:set var="frame" value='target="_parent"'/>
<c:set var="frame" value="_parent"/>
</c:when>
<c:otherwise>
<%--
@ -72,7 +73,7 @@
to checkMail.jsp and use the entire browser window
--%>
<c:if test="${jspHelperBean.passwordRequired}">
<c:set var="frame" value='target="_parent"'/>
<c:set var="frame" value="_parent"/>
<c:set var="url" value="checkMail.jsp"/>
</c:if>
<c:if test="${not jspHelperBean.passwordRequired}">
@ -81,30 +82,56 @@
</c:otherwise>
</c:choose>
<form action="${url}" ${frame} method="GET">
<csrf:form action="${url}" target="${frame}" method="POST">
<input type="hidden" name="checkMail" value="1"/>
<c:set var="disable" value=""/>
<c:if test="${connStatus != CONNECTED}">
<c:set var="disable" value="disabled=&quot;disabled&quot;"/>
</c:if>
<button type="submit" value="Check Mail" ${disable}><ib:message key="Check Mail"/></button>
</form>
</csrf:form>
</div>
<c:if test="${jspHelperBean.newMailReceived}">
${jspHelperBean.newEmailNotificationContent}
<script language="Javascript">
// refresh folder list to update the new message count
parent.frames[1].location.href = 'folders.jsp';
// If inbox is being displayed, reload so the new email(s) show
if (parent.document.getElementById('inboxFlag'))
parent.location.href = 'folder.jsp?path=Inbox';
function notifyUser() {
var options = {
body: notifBody
}
var n = new Notification(notifTitle, options);
setTimeout(n.close.bind(n), 5000);
}
function checkNotification() {
if ('Notification' in window) {
if (Notification.permission === 'granted') {
notifyUser();
}
else if (Notification.permission !== 'denied') {
Notification.requestPermission(function (permission) {
if (permission === 'granted') {
notifyUser();
}
});
}
}
}
function refreshUI() {
// refresh folder list to update the new message count
parent.frames[1].location.href = 'folders.jsp';
// If inbox is being displayed, reload so the new email(s) show
if (parent.document.getElementById('inboxFlag'))
parent.location.href = 'folder.jsp?path=Inbox';
}
checkNotification();
refreshUI();
</script>
</c:if>
</c:if>
<div class="compose frame">
<form action="newEmail.jsp" target="_top" method="GET">
<csrf:form action="newEmail.jsp" target="_top" method="GET">
<button type="submit" value="New"><ib:message key="Compose"/></button>
</form>
</csrf:form>
</div>
<div class="lastcheck">

View File

@ -0,0 +1,34 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="Security Violation" var="title" scope="request"/>
<ib:message key="CSRF Security Violation" var="pagetitle" scope="request"/>
<jsp:include page="header.jsp"/>
<h1><ib:message key="CSRF Security Violation"/></h1>
${ib:csrfErrorMsg()}
<jsp:include page="footer.jsp"/>

View File

@ -22,22 +22,29 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:set var="action" value="${param.action}" scope="request"/>
<c:if test="${not empty action and pageContext.request.method ne 'POST'}">
<c:set var="action" value="" scope="request"/>
<ib:message key="Form must be submitted using POST." var="errorMessage" scope="request"/>
</c:if>
<ib:message key="Debug" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<h1><ib:message key="Debug Page"/></h1>
<c:if test="${empty param.action}">
<form action="debug.jsp">
<c:if test="${empty action}">
<csrf:form action="debug.jsp" method="POST">
<input type="hidden" name="action" value="checkFiles"/>
<ib:message key="Test encrypted files" var="submitButtonText"/>
<input type="submit" value="${submitButtonText}"/>
</form>
</csrf:form>
</c:if>
<c:if test="${param.action eq 'checkFiles'}">
<c:if test="${action eq 'checkFiles'}">
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<ib:requirePassword>
<c:set var="undecryptableFiles" value="${jspHelperBean.undecryptableFiles}"/>

View File

@ -23,6 +23,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
@ -41,7 +42,14 @@
--%>
<ib:requirePassword>
<c:if test="${param.action eq 'cancel'}">
<c:set var="action" value="${param.action}" scope="request"/>
<c:if test="${not empty action and pageContext.request.method ne 'POST'}">
<c:set var="action" value="" scope="request"/>
<ib:message key="Form must be submitted using POST." var="errorMessage" scope="request"/>
</c:if>
<c:if test="${action eq 'cancel'}">
<c:set var="backUrl" value="${param.backUrl}"/>
<c:if test="${empty backUrl}">
<c:set var="backUrl" value="addressBook.jsp"/>
@ -51,7 +59,7 @@
</jsp:forward>
</c:if>
<c:if test="${param.action eq 'save'}">
<c:if test="${action eq 'save'}">
<c:choose>
<c:when test="${empty param.destination}">
<ib:message key="Please fill in the Destination field." var="errorMessage"/>
@ -100,7 +108,7 @@
</c:choose>
<jsp:include page="header.jsp"/>
<form name="form" action="editContact.jsp" method="post">
<csrf:form name="form" action="editContact.jsp" method="POST">
<ib:copyParams paramsToCopy="${param.paramsToCopy}"/>
<div class="contact-form-label">
@ -134,13 +142,14 @@
<div class="contact-form-label">
<div class="field-label"><ib:message key="Text:"/></div>
</div>
<div class="contact-form-text">${fn:escapeXml(contact.text)}</div>
<input type="hidden" name="text" value="${contact.text}"/>
<div class="contact-form-value">
<input type="text" size="40" name="text" value="${ib:escapeQuotes(contact.text)}"/>
</div>
<p>&nbsp;</p>
<button name="action" value="save">${submitButtonText}</button>
<button name="action" value="cancel"><ib:message key="Cancel"/></button>
</form>
</csrf:form>
<script type="text/javascript" language="JavaScript">
if (document.forms['form'].elements['destination'].value == "")

View File

@ -23,6 +23,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
@ -58,7 +59,7 @@
<jsp:include page="identitiesHelp.jsp"/>
</ib:expandable>
</c:if>
<form name="form" method="post" action="submitIdentity.jsp">
<csrf:form name="form" method="POST" action="submitIdentity.jsp">
<div class="identity-form-label">
<div class="field-label"><ib:message key="Public Name:"/></div>
<div class="addtl-text"><ib:message key="(required field, shown to recipients)"/></div>
@ -217,11 +218,11 @@
<button name="action" value="delete" title="<ib:message key='Delete this identity'/>"><ib:message key="Delete"/></button>
</div>
</c:if>
</form>
</csrf:form>
<script type="text/javascript" language="JavaScript">
document.forms['form'].elements['publicName'].focus();
</script>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -20,13 +20,14 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="Export Identities" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<ib:requirePassword>
<form action="exportIdentitiesFile" method="POST">
<csrf:form action="exportIdentitiesFile" method="POST">
<div class="password-label">
<ib:message key="Password:"/>
<div class="addtl-text"><ib:message key="(leave blank to not encrypt identities)"/></div>
@ -35,7 +36,7 @@
<div class="password-label"><ib:message key="Confirm:"/></div>
<div class="password-field"><input type="password" name="nofilter_confirm"/></div>
<button type="submit"><ib:message key="Export"/></button>
</form>
</csrf:form>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -25,5 +25,5 @@
<ib:message key="FAQ" var="title" scope="request"/>
<ib:message key="Frequently Asked Questions" var="pagetitle" scope="request"/>
<c:set var="navSelected" value="faq" scope="request"/>
<c:set var="filename" value="${ib:getLocalizedFilename('FAQ.html', pageContext.servletContext)}" scope="request"/>
<jsp:forward page="showHtml.jsp"/>
<c:set var="filename" value="${ib:getLocalizedFilename('html/FAQ.html', pageContext.servletContext)}" scope="request"/>
<jsp:forward page="showHtml.jsp"/>

View File

@ -23,6 +23,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
@ -51,9 +52,9 @@
<jsp:include page="header.jsp"/>
<div class="compose float">
<form action="newEmail.jsp" target="_top" method="GET">
<csrf:form action="newEmail.jsp" target="_top" method="POST">
<button type="submit" value="New"><img src="${themeDir}/images/compose.png"/></button>
</form>
</csrf:form>
</div>
<c:set var="folderName" value="${param.path}"/>
@ -239,4 +240,4 @@
</table>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -33,7 +33,7 @@
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="${themeDir}/i2pbote.css" />
<link rel="stylesheet" href="${themeDir}/i2pbote.css?v=${jspHelperBean.appVersion}" />
<c:set var="refreshInterval" value="120"/>
<c:if test="${ib:getMailFolder('Outbox').numElements gt 0}">
<c:set var="refreshInterval" value="20"/>
@ -52,4 +52,4 @@
</div>
</body>
</html>
</html>

View File

@ -57,7 +57,7 @@
<meta http-equiv="refresh" content="${refreshInterval};url=${refreshUrl}" />
</c:if>
<link rel="stylesheet" href="themes/${jspHelperBean.configuration.theme}/i2pbote.css" />
<link rel="stylesheet" href="themes/${jspHelperBean.configuration.theme}/i2pbote.css?v=${jspHelperBean.appVersion}" />
<link rel="icon" type="image/png" href="${themeDir}/images/favicon.png" />
<c:if test="${!empty title}">
<title>${title} <ib:message key="- I2P-Bote"/></title>
@ -83,10 +83,14 @@
<iframe src="buttonFrame.jsp" class="button-frame"></iframe>
</div>
<div class="menubox-divider"></div>
<div class="menubox">
<iframe src="folders.jsp?selected=${navSelected}" class="folders-frame"></iframe>
</div>
<div class="menubox-divider"></div>
<div class="menubox">
<h2><ib:message key="Addresses"/></h2>
<a class="menuitem${navSelected == 'identities' ? ' selected' : '' } identities" href="identities.jsp">
@ -105,6 +109,8 @@
--%>
</div>
<div class="menubox-divider"></div>
<div class="menubox">
<h2><ib:message key="Configuration"/></h2>
<a class="menuitem${navSelected == 'settings' ? ' selected' : '' } settings" href="settings.jsp">
@ -113,11 +119,15 @@
</a>
</div>
<div class="menubox-divider"></div>
<div class="menubox">
<h2><ib:message key="Network Status"/></h2>
<iframe src="statusFrame.jsp?selected=${navSelected}" class="status-frame"></iframe>
</div>
<div class="menubox-divider"></div>
<div class="menubox">
<h2><ib:message key="Help"/></h2>
<a class="menuitem${navSelected == 'user-guide' ? ' selected' : '' }" href="userGuide.jsp"><ib:message key="User Guide"/></a>
@ -133,8 +143,30 @@
<section class="main">
</c:if>
<c:if test="${empty infoMessage}"><c:set var="infoMessage" value="${param.infoMessage}"/></c:if>
<c:if test="${not empty infoMessage}"><div class="infoMessage">${fn:escapeXml(infoMessage)}</div></c:if>
<c:if test="${not jspHelperBean.requiredCryptoStrengthSatisfied}">
<ib:message key="For I2P-Bote to function properly, you must download the JCE Unlimited Strength Jurisdiction Policy files and move them into this folder:" var="infoMessage"/>
<c:set var="errorMessage" value="${jspHelperBean.JREHome}/lib/security"/>
<c:set var="snackbarAction" value="userGuide.jsp#Unlimited-Strength-Crypto"/>
<ib:message key="Guide" var="snackbarActionText"/>
</c:if>
<c:if test="${empty infoMessage}"><c:set var="infoMessage" value="${param.infoMessage}"/></c:if>
<c:if test="${empty errorMessage}"><c:set var="errorMessage" value="${param.errorMessage}"/></c:if>
<c:if test="${not empty errorMessage}"><div class="errorMessage">${fn:escapeXml(errorMessage)}</div></c:if>
<c:if test="${not empty infoMessage or not empty errorMessage}">
<div class="snackbar"><div>
<div class="message">
<c:if test="${not empty infoMessage}"><div class="infoMessage">${fn:escapeXml(infoMessage)}</div></c:if>
<c:if test="${not empty errorMessage}"><div class="errorMessage">${fn:escapeXml(errorMessage)}</div></c:if>
</div>
<c:if test="${not empty snackbarAction}">
<c:if test="${empty snackbarActionTarget}">
<a href="${snackbarAction}" class="action">${fn:escapeXml(snackbarActionText)}</a>
</c:if>
<c:if test="${not empty snackbarActionTarget}">
<a href="${snackbarAction}" class="action" target="${snackbarActionTarget}">${fn:escapeXml(snackbarActionText)}</a>
</c:if>
</c:if>
</div></div>
</c:if>

View File

@ -516,15 +516,19 @@ licenses/BouncyCastle.txt).</blockquote>
<p>(Both of which are free open source licences.)</p>
<p>The source code can be found in the <code>i2p.i2p-bote</code> branch of
<a href="https://geti2p.net/en/get-involved/guides/new-developers#monotone">the I2P Monotone repository</a>.
There is also a <a href="https://github.com/i2p/i2p.i2p-bote">GitHub mirror</a>
which can be used to view the code.
<h3 id="Credits">Who made I2P-Bote?</h3>
<p>(See also <a href="about.jsp">Credits</a>!)</p>
<p>Conception, technical design, implementation and original web user interface
were done by HungryHobo, an anonymous developer.</p>
<p>Conception, technical design, implementation and web user interface
were/are done by HungryHobo, an anonymous developer. For feedback
or if you want to offer help, you can contact him using I2P-Bote.
His destination key is:</p>
<p>The current developer of I2P-Bote is str4d.</p>
<p><b>hobo37SEJsEMfQHwcpVlvEgnrERGFz34GC1yjVyuRvl1QHnTi0UAoOtrLP~qkFY0oL59BBqj5sCep0RA8I5G8n</b></p>
<p>For feedback or if you want to offer help, see
<a href="about.jsp">the About page</a> for contact details.</p>
<h3 id="Languages">What languages are available?</h3>
<p>English, German, Russian, French, Spanish, Portuguese, Dutch,

View File

@ -0,0 +1,534 @@
<div>
<h1>Häufig gestellte Fragen</h1>
<nav><p><a href="#What">Was ist I2P-Bote?</a></p>
<p><a href="#Name">Warum heißt es I2P-Bote?</a></p>
<p><a href="#Why">Warum I2P-Bote?</a></p>
<p><a href="#Sending">Was passiert mit einer E-Mail, nachdem ich auf 'Senden' klicke?</a></p>
<p><a href="#RandomPeople">Einen Moment, alle von mir gesandten Emails werden auf der Festplatte irgendeiner anderen Person gespeichert? Das scheint überhaupt keine gute Idee zu sein!</a></p>
<p><a href="#HowItWorks">Wie genau funktioniert es?</a></p>
<p><a href="#NothingToHide">Warum sollte ich es nutzen? Ich habe nichts zu verbergen &hellip;</a></p>
<p><a href="#GPG">Was ist mit PGP und GPG?</a></p>
<p><a href="#UsingGPG">Kann ich GPG/PGP weiterhin mit I2P-Bote verwenden?</a></p>
<p><a href="#Susimail">Wie ist es im Vergleich zu Susimail?</a></p>
<p><a href="#Comparison">Warum ist I2P-Bote besser?</a></p>
<p><a href="#Safeguards">Wie bleibt meine Identität sicher, wenn ich im Emailaustausch mit jemandem stehe?</a></p>
<p><a href="#How">Wie verwende ich es?</a></p>
<p><a href="#EmailClients">Kann ich ein E-Mail-Programm wie Thunderbird benutzen?</a></p>
<p><a href="#Attachments">Kann ich Anhänge senden und welche Einschränkungen bestehen?</a></p>
<p><a href="#CreateIdentity">Wie erstelle ich ein E-Mail-Konto?</a></p>
<p><a href="#EmailDestination">Was ist eine Email Zieladresse? Was ist mit Email-Adressen?</a></p>
<p><a href="#AddressLength">Warum sind die E-Mail-Adressen so lang??</a></p>
<p><a href="#AddressBook">Aber ich kann mir diese langen Zieladressen nicht merken;</a></p>
<p><a href="#MultipleIdentities">Welchen Grund gibt es, mehrere Bote-Identitäten zu haben?</a></p>
<p><a href="#EncryptionTypes">Welche Verschlüsselungsart ist die beste?</a></p>
<p><a href="#Algorithms">Welche Algorithmen werden für die symmetrische Verschlüsselung und den Hash-Prozess verwendet`?</a></p>
<p><a href="#AntiSpam">Gibt es Anti-Spam-Maßnahmen?</a></p>
<p><a href="#HTML">Was ist mit HTML und gestyltem Text?</a></p>
<p><a href="#Persistence">Wie lange werden E-Mails gespeichert?</a></p>
<p><a href="#DoIdentitiesExpire">Wie lange sind E-Mail Adressen gültig?</a></p>
<p><a href="#Gateways">Kann ich Emails von normalen Email-Servern senden und empfangen?</a></p>
<p><a href="#Postman">Kann ich Email von Postman's traditionellem I2P Email-Konto senden und empfangen?</a></p>
<p><a href="#Know">What does it mean when Know is x'ed for a mail in my
inbox?</a></p>
<p><a href="#Terms">Was bedeuten die Einstellungen “BktPfx”, “Distance” und “Locked?”?</a></p>
<p><a href="#Anonymous">Was kann ich tun, um meine Anonymität zu erhöhen?</a></p>
<p><a href="#Timestamps">Wie sende ich keine Zeitstempel?</a></p>
<p><a href="#Backups">Wie kann ich meine Einstellungen und Daten zu einem
anderen Computer migrieren oder sie sichern?</a></p>
<p><a href="#MailRoutes">Was ist eine <em>Mail-Route</em>?</a></p>
<p><a href="#HighLatency">Was bedeutet Übertragung mit hoher Latenzzeit?</a></p>
<p><a href="#Latencies">Welche Latenzen gibt es und wie können sie kontrolliert werden
(falls überhaupt)?</a></p>
<p><a href="#WhyI2P">Falls I2P-Bote seine eigene Anonymität generiert,
wozu braucht es dann I2P?</a></p>
<p><a href="#WithoutRoutes">Wie anonym/sicher ist I2P-Bote ohne Mail-Routen?</a></p>
<p><a href="#OpenSource">Ist I2P-Bote quelloffen?</a></p>
<p><a href="#Credits">Wer hat I2P-Bote gemacht?</a></p>
<p><a href="#Languages">Welche Sprachen sind verfügbar?</a></p>
<p><a href="#Translate">Wie kann ich helfen, I2P-Bote in meine Sprache zu übersetzen?</a></p>
<p><a href="#Technical">Wie funktioniert das auf der technischen Ebene?</a></p>
<p><a href="#GetInvolved">Gibt es andere Möglichkeiten, wie ich helfen kann?</a></p>
</nav><h3 id="What">Was ist I2P-Bote?</h3>
<p>Ein Peer-to-Peer Email-Programm ausgelegt um deine Privatsphäre zu schützen.</p>
<p>I2P-Bote ist ein Ende-zu-Ende verschlüsseltes, netzwerk-internes, vollkommen
dezentralisiertes (serverloses) e-mail System. Es unterstützt verschiedene
Identitäten und enthüllt keine e-mail Header. Es ist derzeit
noch Alpha-Software. Es kann über eine Webkonsole erreicht werden und es
bietet IMAP und SMTP Unterstützung, womit bote-mails von normalen
email-Klienten empfangen und verfasst werden können. Es ist vorhergesehen, zusätzliche
Anonymität zu bieten, indem eine Transportoption mit hoher Latenz zu bieten. Alle
bote-mails sind automatisch Ende-zu-Ende verschlüsselt, sodass
keine e-mail Verschlüsselung eingerichtet werden muss (obwohl optional möglich)
und bote-mails werden automatisch authentifiziert. Da es
dezentralisiert ist, gibt es keine e-mail Server die verschiedene
e-mail Identitäten durch Kommunikationen miteinander verbinden könnten (Profiling):
Nicht einmal die Knotenpunkte die die Mails weiterleiten kennen den Absender und
abgesehen von Absender und Empfänger, wird lediglich der Endpunkt des hochlatenten
Mail-Tunnels und die lagernden Knoten wissen, an wen (welche anonyme
Identität) die Mail gerichtet ist. Der ursprüngliche Absender kann
offline gegangen sein, lange bevor die Mail auf der anderen Seite ankommt.
Dies erhöht den Grad an Anonymität der mit I2P-Bote
erreicht werden kann. Für diejenigen, die keine langen Verzögerungen in Kauf
nehmen wollen: All diese Einstellungen sind von Nutzer anpassbar, sodass
jeder Nutzer entscheidet, wieviel Anonymität er für seine Zwecke benötigt
oder möchte.</p>
<h3 id="Name">Warum heißt es I2P-Bote?</h3>
<p>Bote ist das deutsche Wort für Kurier.</p>
<h3 id="Why">Was ist I2P-Bote?</h3>
<p>Weil es cool ist. Und weil es I2P an einem dezentralisierten Email-Service mangelte und sich dann die Möglichkeit ergab, die zuvor ignorierten Sicherheitsaspekte zu verbessern, wurde entschieden, einen Transport mit optional hoher Latenzzeit hinzuzufügen. Man kann eine normale Email mit Ende-zu-Ende-Verschlüsselung erstellen, aber sie ist dennoch nicht anonym. Man kann anonyme, an Server gebundene Emails schreiben, aber sie sind nicht automatisch Ende-zu-Ende-verschlüsselt.</p>
<p>Oder du kannst I2P-Bote einsetzen, wobei deine Mails anonym sind und <em>automatisch</em> Ende-zu-Ende-verschlüsselt sind.</p>
<p>Im Gegensatz zu Standard E-Mail-Systemen ist es nicht erforderlich, zusätzliche Anwendungen für das Schlüssel-Management zu installieren. Alles, was gebraucht wird, ist bereits vorhanden. </p>
<p>Obwohl es wenig komplex und einfach zu verwenden ist, bietet es Verschlüsselung auf militärischem Niveau und Optionen für extrem starke Kryptographie.</p>
<h3 id="Sending">Was passiert mit einer E-Mail, nachdem ich auf 'Senden' klicke?</h3>
<p>Es ist verschlüsselt und gespeichert auf Computern anderer I2P-Bote Teilnehmer. Vor dort aus wird es an den Empfänger übertragen, wenn dieser seine Mails abruft.</p>
<h3 id="RandomPeople">Einen Moment, alle von mir gesandten Emails werden auf der Platte einer beliebigen Person gespeichert? Das scheint keine besonders gute Idee zu sein!
Wait a minute, all email I send is saved on some random
person's hard drive? That sounds like a really dumb idea!</h3>
<p>Alles was sie sehen, ist Datenmüll, da es auf militärischem Niveau verschlüsselt ist. Nur du und der Empfänger kennen den Inhalt der Email. Darüber hinaus ist es nicht möglich zu erkennen, wer die Email gesandt hatte, sofern mit der Option 'Relays enabled' gesandt wurde. </p>
<p>Zwischen diesem und dem Einsatz eines Email-Kontos mit einer
<a href="http://www.theregister.co.uk/2009/12/07/schmidt_on_privacy/">Gesellschaft, die deine Privatsphäre nicht respektiert,</a>, über eine Internetverbindung, die
<a href="http://www.eff.org/issues/nsa-spying">dich über dubiose Dienstanbieter ausspioniert</a>, welchen erachtest du als vertrauenswürdiger?</p>
<h3 id="HowItWorks">Wie genau funktioniert es?</h3>
<p>Siehe den Abschnitt <a href="userGuide.jsp#Technical-Concept">'Technisches Konzept'</a>
des <a href="userGuide.jsp">Benutzerhandbuchs</a>.</p>
<p>Zusammengafaßt: I2P-Bote Nodes eines P2P-Netzwerkes leiten
gegenseitig Emailpakete weiter und speichern diese in einem DHT (Distributed Hash Table) ab. </p>
<h3 id="NothingToHide">Warum sollte ich es nutzen? Ich habe nichts zu verbergen &hellip;</h3>
<p>Weil Sie auch nicht nackt auf die Straße gehen würden, oder?</p>
<p>Nun, vielleicht würdest du. Aber der Punkt ist, dass du manchmal von privater Email-Kommunikation wünscht, dass sie geheim und nicht verfolgbar ist und du nicht die ganze Welt wissen lassen willst, wann du was zu wem sagst.</p>
<p>Und manchmal möchtest du einfach nur vollständig anonym mit anderen kommunizieren.</p>
<p>Dafür ist I2P-Bote das ideale Werkzeug mit einem gehörigem Maß an Sicherheit und sich dabei dennoch durch breite Flexibilität auszeichnet. </p>
<p>Es zielt darauf aus, professionelle Sicherheit auf militärischem Niveau zur Verfügung zu stellen und das bei Bedienbarkeit, die selbst Anfängern gerecht wird: es gibt wirklich paranoide Einstellungen, bei der die Laufzeit einer Email Lichtjahre zu betragen scheint, oder andere - für schnellere Kommunikation bei Wahrung eines hohen Maßes an Anonymität.</p>
<p>Sie entscheiden - einfach mit einem Mausklick.</p>
<h3 id="GPG">Was ist mit <a href="http://www.pgp.com/">PGP</a> und
<a href="http://gnupg.org/">GPG</a>?</h3>
<p>Mittels PGP und GPG kannst du Email verschlüsseln und sie über ein existierendes Email-Konto versenden. Beide Verfahren bieten starke Verschlüsselung, aber sie verschlüsseln nur den Körper der Email, nicht den Nachrichtenkopf, was bedeutet, dass die Betreffzeile, der Computername und andere Informationen nicht sicher sind.</p>
<p>Ein weiteres Argument in Sachen Privatheit ist die Tatsache, dass PGP/GPG niemanden davon abhalten kann, festzusttllen, wer mit wem spricht. </p>
<p>I2P-Bote hingegen verschlüsselt alles ausser der Zieladresse des Empfängers (Tatsächlich ist die Zieladresse des Empfängers nur für Nodes ersichtlich; sie wissen nicht, wer der Absender der Email war). Es besteht auch die Möglichkeit, die Email über multiple Relays zu senden (ähnlich wie bei
<a href="http://mixmaster.sourceforge.net/">Mixmaster</a>), sodaß niemand herausfinden kann, wer an wen eine Email sendet. </p>
<h3 id="UsingGPG">Kann ich GPG/PGP weiterhin mit I2P-Bote verwenden?</h3>
<p>Natürlich. Entweder verschlüsseltst du den Emailtext mit GPG, bevor er in das I2P-Bote Editier-Feld kopiert wird, oder verwende eine Mail-App mit GPG-Unterstützung. </p>
<h3 id="Susimail">Wie ist der Vergleich mit Susimail?</h3>
<p>I2P-Bote ist besser, da es eine höhere Versions-Nummer hat... Nur Spaß.</p>
<p>I2P-Bote bietet mehr Privatheit, aber Suismail hat einige Optionen, die I2P-Bote noch nicht hat (siehe unten), und Susimail ist effizienter hinsichtlich Bandbreite, da es Emails nicht redundant speichert.</p>
<h3 id="Comparison">Warum ist I2P-Bote besser?</h3>
<p><em>Wir</em> denken, es ist besser für <em>uns</em> (und vielleicht auch für dich;
entscheide selber!), als:</p>
<ul>
<li><p>Mixminion, da es einfach zu bedienen ist und von uns
so idiotensicher wie möglich gestaltet haben.</p></li>
<li><p>anonyme E-Mail Services, die nicht über die Zieladresse
geroutet werden: da diese integrierte Ende-zu-Ende-
Verschlüsselung nicht beinhalten.</p></li>
<li><p>Bei zentralisierten Diensten könnte der Server down
gehen (aufgrund von Attacken, aus legalen Gründen, mangels finanzieller Unterstützung oder mangels Interesse). Zudem hat der Server Administrator zu viele Ansatzpunkte für aktives Profiling. </p></li>
</ul>
<h3 id="Safeguards">Wie wird meine Identität geheim gehalten, wenn ich Email mit jemandem austausche?</h3>
<p>Deine IP-Adresse, ebenso die I2P-Zieladresse werden niemals in
den Nachrichtentext der Email eingebunden, die du sendest. </p>
<p>Der Transport mit hoher Latenzzeit wiedersteht Timing Attacken.</p>
<p>Ende-zu-Ende Verschlüsselung, per-Sprung Verschlüsselung, Weiterleitung von Paketen für
andere Knoten, eine einzelne Paketgröße* (Padding), eine konstante Rate,
mit der gesendet wird (Test- und Dummynachrichten)*, sowie eher ausgeglichene
ankommende/ausgehende Rate* verhindern Traffic Analyse-Angriffe und in
Kombination mit per-Sprung-Verzögerungen, bietet I2P-Bote ein gutes Mittel gegen
Durchschnitts- / Intersektionsangriffe.</p>
<p>Die Open-Source-Eigenschaft von I2P-Bote garantiert, dass du die
Programm-Module selber sehen und auf Fehler prüfen kannst. </p>
<p>*[noch nicht implementiert]</p>
<h3 id="How">Wie verwende ich es?</h3>
<p>Lese <a href="userGuide.jsp">die Anleitung</a> oder sehe nach den anderen
Fragen und Antworten hier!</p>
<p>Falls noch offene Fragen bestehen, frage im Forum nach:
<a href="http://forum.i2p/viewforum.php?f=35">http://forum.i2p/viewforum.php?f=35</a></p>
<h3 id="EmailClients">Kann ich ein E-Mail-Programm wie Thunderbird benutzen?</h3>
<p>Ja, du kannst das Email-Programm deiner Wahl verwenden, so
so lange dieser IMAP und SMTP unterstützt. </p>
<h3 id="Attachments">Kann ich Anhänge senden und welche Einschränkungen bestehen?</h3>
<p>Ja, Anhänge sind seit der Version 0.2.5 unterstützt. Die
Gesamtgröße der angefügten Dateien sollte klein gehalten werden, vorzugsweise kleiner 500K.</p>
<h3 id="CreateIdentity">Wie erstelle ich ein E-Mail-Konto?</h3>
<p>I2P-Bote nennt sie Email Identitäten. Du kannst eine im I2P-Bote
Web Interface unter dem "Identities" Link erstellen. Der Grund,
warum es nicht Konto genannt wird ist, weil es keinen Provider wie
GMail oder GMX gibt. Nur du alleine verfügst über den
(kryptografischen) Schlüssel zur Email Identität. </p>
<p>Wenn du eine Email-Identität erstellst, generiert I2P-Bote einen
Reihe von Zahlen und Buchstaben, die sich Email-Zieladresse
nennt. Dies ist die Adresse, unter der du erreichbar bist. </p>
<p>Beispiel: <code>wsq-8u5bTWbaOsrS0JuXRKL-RsbTkckV4W7u2mIu0Yrlfetixq1F~03CArnvbd6tDWwjPHYEuoKyWqwxplSdix</code></p>
<h3 id="EmailDestination">Was ist eine Email-Zieladresse? Was ist mit Email-Adressen?</h3>
<p>Email Zieladressen (alias Bote Destinationen) sind zwischen 86
und 512 Zeichen lang und zwar abhängig von der Art der
Verschlüsselung. Unterstützung für einfach zu merkende Email-
Adressen ist für die Zukunft geplant. </p>
<p>Die E-Mail Identitäten bestehen aus öffentlichen und privaten
Schlüsseln, so wie aus einem Name, den der Anwender dafür
aussucht. Der öffentliche Teil ist Ihre Emai-Adresse, Ihre pseudonyme
Identität. Ein realer Anwender kann über mehr als eine solcher
Identitäten verfügen. Sie sind bestimmt um Mails an bestimmte User
zu adressieren; aus diesem Grund wird hierzu auch Bezug genommen
als 'Destination' oder kurz 'Dest' - so wie das Verschlüsseln von Mails
an Sie. Gleichfalls ist Ihre Email-Zieladresse der Schlüssel, mit dem
andere Ihre Emails an Sie verschlüsseln und mit dem Sie Emails, die
sie von Ihnen erhalten authentifizieren und auf Integrität überprüfen. </p>
<p>Ist es sicher, jemand deine Email-Zieladresse zu geben, von dem
du Emails erhalten willst?</p>
<p>Es ist wichtig, zwischen der Mail Zieladresse und der Router
Identifikation zu unterscheiden. Deine I2P-Bote Mail-Identität ist
nicht gleich der Router / Node-Adresse, die für I2P-Bote Nodes
verwenden, um miteinander zu kommunizieren. </p>
<p>Falls Sie, was höchst unwahrscheinlich ist, Verbindungsprobleme
mit Ihrer I2P-Bote-Anwendung haben, dann könnte es erforderlich
sein, dass Sie die Router-ID Ihres I2P-Boten in I2P's IRC-Kanal
oder im Forum veröffentlichen oder manuell ID's anderer Peers
hinzufügen müssen, um Verbinden zu können, wobei dies bis
heute nie vorgekommen ist. </p>
<p>Es ist <b>nicht mit Ihrer IP-Adresse verbunden</b>. Dennoch Sollten
Sie die I2P-Bote-Router-ID nicht mit Ihren I2P-Bote-Mail-Destinationen
in Verbindung bringen, da dies die Anonymität aufheben könnte, die
I2P-Bote selber generiert! </p>
<h3 id="AddressLength">Warum sind die E-Mail-Adressen so lang?</h3>
<p>In I2P-Bote wird jede Mail (automatisch) verschlüsselt. Um zu
vermeiden, dass Sie eine E-Mail-Adresse <b>und</b> einen langen
Schlüssel austauschen müssen, haben wir diesen Schlüssel einfach
zur Adresse gemacht. Dies hat zwei weitere Vorteile: Sie müssen sich
keine Gedanken darum machen, ob eine Adresse bereits vergeben ist.
oder nicht (zumindest nicht, so lange Sie keine Emails ausserhalb des
I2P-Netzes senden oder empfangen) und Sie brauchen kein separates
Key-Management-System um Ihre Schlüssel handzuhaben. </p>
<p>Es ist sicher, diesen Schlüssel weiterzugeben, da es der einzige
öffentliche Schlüssel ist, den jeder kennen darf, ohne deine
Sicherheit zu kompromitieren. </p>
<p>Die optionale Verwendung der ECC Verschlüsselung hat kürzere
E-Mail Zieladressen zur Folge. </p>
<h3 id="AddressBook">Aber ich kann mir diese Langen Zieladressen nicht merken&hellip;</h3>
<p>Dies ist, warum das integrierte Adressbuch da ist. Wenn Ihnen
I2P-Bote nach einiger Zeit mehr vertraut geworden ist, dann
werden Sie die integrierte Verschlüsselung und Authentifizierung,
die nur mittels kryptografischer Schlüssel realisierbar ist, zu
schätzen lernen.
</p>
<p>Nochmal, die Alternative wäre, kurze und einfache Adressen zu
haben <b>plus</b> einen langen Schlüssel für Verschlüsselung und
Authentikation <b>und</b> die Erfordernis, einer Instanz zu vertrauen,
die die Email-Adressen für einen anonymen Empfänger verwaltet. </p>
<h3 id="MultipleIdentities">Welchen Grund gibt es für die Verwendung multipler Identitäten? </h3>
<p>I2P-Bote ist kein Instant-Messenger, so dass Sie mehrere Identitäten
haben können ohne viele Tunnel vorhalten zu müssen. Nur für das
Holen von Mails werden mehr Resourcen gebraucht, die aber
gleichzeitig als Schutz für andere dienen. </p>
<p>Nun, Stellen Sie sich vor Sie würden mittels I2P-Bote ohne Über-
wachung mit Ihren Freunden kommunizieren (siehe Gesetze zur
Voratsdatenspeicherung), und wollen schnell eine Email aussenden,
dass Sie sich heute Nacht an einem anderen Ort treffen werden. Sie
brauchen dann keine Super-Anonymität und können Mail-Routen
und Verzögerung vernachlässigen. Ihre Freunde mögen in diesem
Fall kürzere Abrufintervalle bevorzugen, um Ihre Nachricht zeitig zu
erhalten. Dennoch wollen Sie eine hohe Anonymität für andere
Kommunikation vorhalten - dies ist genau die Situation, in der
unterschiedliche Mail-Identitäten mit unterschiedlichen Mail-Routen,
Verzögerungen und langen Abrufintervallen sind dann von Vorteil. </p>
<h3 id="EncryptionTypes">Welche Verschlüsselungsart ist die beste?</h3>
<p>256-bit <a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a>
generiert kurze und handliche Email-Destinationen und der Algorhytmus wird als stärker angesehen als 2048-bit ElGamal.</p>
<p>521-bit <a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a>
ist stärker als 256-bit ECC, aber macht Email-Destinationen
länger.</p>
<p>2048-bit <a href="http://en.wikipedia.org/wiki/ElGamal">ElGamal</a>
generiert sogar noch längere Email Zieladressen und es ist die
kryptografisch schwächste der drei Optionen. Dennoch ist ElGamal
besser untersucht als ECC, was im Vergleich zu ECC die
Wahrscheinlichkeit unbekannter Schwächen verringert.
</p>
<h3 id="Algorithms">Welche Algorhytmen werden für symmetische Verschlüsselung
und für Hashing eingesetzt? </h3>
<p><a href="http://de.wikipedia.org/wiki/Advanced_Encryption_Standard">AES-256</a>
im <a href="http://de.wikipedia.org/wiki/Cipher_Block_Chaining_Mode">
CBC</a>-Modus und <a href="http://de.wikipedia.org/wiki/SHA-2">SHA-256</a>.</p>
<h3 id="AntiSpam">Gibt es Anti-Spam-Maßnahmen?</h3>
<p>I2P-Bote filtert Spam nicht aktiv, dennoch führt die Tatsache, dass
auch Massenemails bei I2P-Bote manuell zu versenden wären, dazu,
Spammern den Wind aus den Segeln zu nehmen.
Eine weitere Verteidigungslinie ist
<a href="http://www.hashcash.org/">HashCash</a> , welches auf
Protokollebene unterstützt wird und in der Zukunft implementiert
werden kann, falls Spam zu einiem Problem wird. </p>
<h3 id="HTML">Was ist mit HTML oder formatiertem Text?</h3>
<p>Das Webinterface rendert HTML nicht.</p>
<h3 id="Persistence">Wie lange werden Emails vorgehalten?</h3>
<p>Emails sind für 100 Tage verfügbar nachdem sie gesandt
wurden sofern sie nicht gedownloaded und damit gelöscht
wurden. </p>
<p>Emails, die du empfangen hast bleiben auf deinem lokalen
Computer, bis du sie löscht. </p>
<h3 id="DoIdentitiesExpire">Wann laufen E-Mail-Identitäten ab?</h3>
<p>Nie.</p>
<h3 id="Gateways">Kann ich Email von normalen Email-Servern senden und
empfangen?</h3>
<p>Nein, aber daran wird gearbeitet.</p>
<!-- Yes. You can both send and receive mails to/from ordinary internet e-mail accounts -->
<h3 id="Postman">Kann ich Email von Postmans's traditionellem I2P Email-Konto
senden und empfangen?</h3>
<p>Nein, aber auch daran wird gearbeitet.</p>
<!-- Yes. You can both send and receive mails to/from some_name@mail.i2p addresses -->
<h3 id="Know">Was bedeutet es, wenn Nun für eine Mail in meiner Inbox
mit X markiert ist?</h3>
<p>Wenn die Zieladresse des Senders lokal nicht bekannt ist,
dann wird die Mail in der "Know" Zeile mit X markiert oder
durch setzten von "(UNK)" vor die Adresse des Senders in
IMAP. </p>
<p>Dies bedeutet, dass es nicht beweisbar ist, ob dieser User wirklich
ist, wer er unter seinem Benutzername vorgibt zu sein. Natürlich,
wenn seine Signatur gültig ist, wissen Sie, dass er über den
Schlüssel für die Ziel-Adresse verfügt, mit der die Mail signiert ist
und dass der Inhalt der Mail von dieser Person stammt. Aber Sie
können sich hier nicht auf den Kurzname berufen. Wenn Sie bereits
zuvor eine Mail von diesem User erhalten hatten, können Sie nicht
sicher sein, dass dies nun der gleiche User ist, selbst dann, wenn
die Signatur gültig ist. In diesem Fall müssen Sie den Adress-
Schlüssel vergleichen und ihn zu Ihrem Adressbuch hinzufügen.
Ein Benutzer, der nicht lokal bekannt ist, muss nicht zwangsläufig
volatil sein, aber Sie sollten nicht davon ausgehen, dass es der
User ist, den Sie hinter der Adresse vermuten. Aber wenn sie mit
den lokal gespeicherten Schlüsseln vergleichen, wissen Sie
spätestens, wenn Sie eine zweite Mail von Ihm erhalten, dass es
der gleiche User wie zuvor ist und Sie erhalten einen grünen
Hinweis. </p>
<h3 id="Terms">Was bedeuten “BktPfx”, “Distance” and “Locked?”?</h3>
<ul>
<li><p>BktPfx = BucketPräfix</p></li>
<li><p>Distanz: die Distanz eines I2P-Bote Nodes zu deinem
eigenen Node im Keyspace</p></li>
<li><p>Locked: Wenn ein Node aus welchen Gründen auch immer,
nicht erreichbar ist, wird er als locked markiert, plus für die
Zeit, für die festgestellt wurde, die er noch unerreichbar sein
wird. </p></li>
</ul>
<h3 id="Anonymous">Was kann ich tun um meine Anonymität zu erhöhen?</h3>
<ul>
<li><p>Sende keine identifizierenden Informationen über dich
(Name, Adresse, Fotos, geografische Standorte, Zeitzone,
Alter, Geschlecht, Webseiten, Loginnamen, I2P Router ID's,
I2P-Bote ID's, Dateien, die Informationen über den Autor
oder über dich enthalten &amp;hellip)!</p></li>
<li><p>Sende keine persönlichen Informationen, über die nur du
verfügen kannst. </p></li>
<li><p>lassen Sie I2P-Bote 24/7 laufen,</p></li>
<li><p>verwende Mailrouten mit zufälligen Verzögerung je Hop und /
oder festen per-Hop-Sendezeiten [noch nicht vollständig
implementiert]</p></li>
<li><p>verwenden Sie ein langes Abrufintervall,</p></li>
<li><p>verwenden Sie eine lange lokale Verzögerung für eigene Pakete,</p></li>
<li><p>verwende große Intervalle nach zufälligem Muster [noch nicht
implementiert]</p></li>
<li><p>unterdrücke Sendezeit und -datum im Email Header,</p></li>
<li><p>unterdrücke die Übersetzung von Markern wie "Re:" in
andere Sprachen</p></li>
<li><p>beachten Sie Ihren Sprach- und Schreibstil,</p></li>
<li><p>verwenden Sie verschiedene E-Mail-Identitäten,</p></li>
<li><p>Überlegungen zum Verwerfen von E-Mail Identitäten nach
längerer Zeit ohne Verwendung,</p></li>
<li><p>&hellip;</p></li>
</ul>
<p>Diese Liste soll dich nicht nervös machen, sondern dir zeigen, wo
Anonymität verringert werden könnte.</p>
<h3 id="Timestamps">Wie sende ich keine Zeitstempel?</h3>
<p>Gehe in die Einstellungen und deaktiviere das Senden von Zeitstempeln. Dies wird
zum Ergebnis haben, dass deine Nachrichten weder Zeit noch Datum des
Absendens beinhalten.</p>
<!-- <p>(When using mailroutes, the timestamps are automatically disabled.) [not yet implemented]</p> -->
<h3 id="Backups">Wie kann ich meine Einstellungen und Daten auf einen anderen
Computer übertragen oder sie sichern?</h3>
<p>I2P-Bote speichert alle emails und andere Daten im <code>i2pbote</code>
Ordner. Unter Windows, dieser Ordner kann unter
<code>%APPDATA%\I2P\i2pbote</code> gefunden werden; unter Linux ist es
<code>$HOME/.i2p/i2pbote</code>.</p>
<p>Um alles zu sichern oder zu übertragen, kopiere einfach den ganzen
<code>i2pbote</code> Ordner.</p>
<p>Wenn du lediglich an deinen Email-Identitäten interessiert bist, kopiere die Datei
<code>identities.txt</code>. Für das Addressbuch, kopiere
<code>addressBook.txt</code>.</p>
<h3 id="MailRoutes">Was ist eine <em>Mail-Route</em>?</h3>
<p>Siehe: Was bedeutet Transport mit hoher Latenzzeit?</p>
<!-- <p>(When using mail routes, the timestamps are automatically disabled.) [yet to be implemented]</p> -->
<h3 id="HighLatency">Was bedeutet Transport mit hoher Latenzzeit?</h3>
<p>Es bedeutet, dass Sie eine Option aktivieren können, die bewirkt,
dass Email-Pakete nicht direkt an speichernde Nodes gesandt
werden, sondern von anderen Peers relayed (weitergeleitet) werden
(und diese dabei die Mails nicht lesen können, da in mehreren Stufen
verschlüsselt und in Fragmente zerlegt), die sie nicht sofort weiterleiten,
sondern für eine vom User spezifizierte Zeit halten - im Fall von Senden
spezifiziert vom Sender, im Fall von Empfangen spezifiziert vom
Empfänger. </p>
<p>Daher bedarf es einiger Zeit, bis eine Mail ankommt. Dennoch kann
ein Angreifer nicht einfach Statistiken über Up-Times von Nodes
(wer war wann verbunden) generieren und über die Zeiten, wann
Nachrichten empfangen und gespeichert wurden (welche in einem
Netzwerk mit niedriger Latenz etwa die Zeiten sind, in denen die
Nachricht gesandt wurde), um die Real-Life-Identitäten, die mit
den I2P-Bote-Email Identitäten verbunden sind, offenzulegen.</p>
<h3 id="Latencies">Welche Latenzen gibt es und wie können sie (falls überhaupt,)
kontrolliert werden?</h3>
<p>I2P-Bote wird on-top des I2P-Netzwerkes verteilt und ausgeführt,
so dass es einige Zeit in Anspruch nimmt. Geschwindigkeit ist nicht
unsere Stärke, aber wir stehen uns gut im Vergleich zu anderen
Anonymen Email-Systemen. Ohne aktivierte Mail-Routen dauert es
drei bis zehn Minuten vom Drücken des "Senden"-Buttons bis zur
Anzeige in der Inbox des Empfängers. </p>
<p>Wenn es Ihnen auf Geschwindigkeit ankommt, dann schalten Sie
Mailrouten ganz ab oder setzten Sie sie auf ein Minimum von Hops
und auf eine minimale Verzögerung je Hop, mit der Sie noch leben
können. </p>
<h3 id="WhyI2P">Wenn I2P-Bote seine eigene Anonymität generiert, wozu bedarf
es dann noch I2P?</h3>
<p>I2P-Bote baut aus hauptsächlich fünf Gründen auf I2p auf: </p>
<ul>
<li><p>I2P mangelte es an einem dezentralen E-Mail-Service
und HungryHobo ist ein I2P-User. </p></li>
<li><p>I2P bietet sehr gute Anonymität, ist alltagstauglich und basiert auf
Jahren an Erfahrung. </p></li>
<li><p>Sogesehen On-Top zu sein, ergibt eine Art Rückfallsicherheit
an Anonymität, selbst dann, wenn I2P-Bote kritische Bugs aufweisen
würde. </p></li>
<li><p>Flexibilität: Wir möchten einfache Handhabung bieten für
Anonyme Email-Kommunikation mit niedriger Latenz
mit dennoch hohem Level an Sicherheit. </p></li>
<li><p>I2P, damit und den vielen anderen Apps, die darauf aufsetzen,
generieren eine Menge Datenverkehr, in den sich der Verkehr von
I2P-Bote einfügt. </p></li>
<li><p>Selbst I2P-Bote-Relays sind daher nicht lokalisierbar. </p></li>
</ul>
<h3 id="WithoutRoutes">Wie anonym/sicher ist I2P-Bote ohne Mail-Routen?</h3>
<p>Ziemlich anonym und sehr sicher.</p>
<p>Es profitiert dann von der gleichen Anonymität wie andere
Applikationen für I2P, nämlich der Anonymität, die der I2P-Router
bereitstellt - welche bereits sehr stark ist. Dennoch ist I2P ein
Netzwerk mit niedriger Latenz mit allen Nachteilen eines solchen
Netzwerkes aufgrund seiner ureigenen Natur. Es gibt Angriffe,
gegen die I2P nicht sehr zuverlässig schützen kann. I2P-Bote ist
maximal dafür ausgelegt, um I2P Anonymität mit seiner Option für
Transport mit hoher Latenz zu gewährleisten, was I2P-Bote-Mails
<em>paranoid</em> anonym macht.</p>
<h3 id="OpenSource">Ist I2P-Bote quelloffen?</h3>
<p>Natürlich!</p>
<blockquote>Diese Software ist lizensiert unter der GPL Version 3 (siehe
licenses/GPLv3.txt), mit Ausnahme des BouncyCastle Providers, welcher
unter der Bouncy Castle License lizensiert ist (siehe
licenses/BouncyCastle.txt).</blockquote>
<p>(Beides sind Freie und Open Source Lizenzen)</p>
<p>The source code can be found in the <code>i2p.i2p-bote</code> branch of
<a href="https://geti2p.net/en/get-involved/guides/new-developers#monotone">the I2P Monotone repository</a>.
There is also a <a href="https://github.com/i2p/i2p.i2p-bote">GitHub mirror</a>
which can be used to view the code.</p>
<h3 id="Credits">Wer hat I2P-Bote gemacht?</h3>
<p>Konzeptionierung, technisches Design, Implementierung sowie die ursprüngliche Benutzeroberfläche im Web
wurden von HungryHobo erledigt, einem anonymen Entwickler.</p>
<p>Der aktuelle Entwickler von I2P-Bote ist str4d.</p>
<p>Für Feedback, oder den Fall dass du deine Hilfe anbieten möchtest, wirf einen Blick auf
<a href="about.jsp">die Über-Uns-Seite</a> für Kontaktdetails.</p>
<h3 id="Languages">Welche Sprachen sind verfügbar?</h3>
<p>Englisch, Deutsch, Russisch, Französisch, Spanisch, Portugiesisch,
Niederländisch,Norwegisch, Schwedisch, Chinesisch und Arabisch.</p>
<h3 id="Translate">Wie kann ich dabei helfen, I2P-Bote in meine
Sprache zu übersetzen?</h3>
<p>Übersetzungen werden auf die selbe Art und Weise wie für den Rest von I2P erledigt. Wenn du
helfen möchtest und Fragen hast, bitte <a href="about.jsp">wende dich an den Urheber.</a></p>
<h3 id="Technical">Wie funktioniert es auf der technischen Ebene?</h3>
<p>Sieh dir die Datei <code>doc/techdoc.txt</code> im Quellcode an.</p>
<h3 id="GetInvolved">Welche anderen Möglichkeiten gibt es, um zu helfen?</h3>
<ul>
<li><p>Verwenden Sie I2P-Bote und geben Sie Rückmeldung</p></li>
<li><p>Erzähle Freunden, Familie, Kollegen, usw. über I2P-Bote und hilf</p></li>
<li><p>Erwähne I2P-Bote auf deinem Blog, deiner eepsite oder Website</p></li>
<li><p>Schreibe eine Nutzer-Anleitung oder verbessere die technische Dokumentation</p></li>
<li><p>Füge Funktionen hinzu oder behebe Bugs (<a href="about.jsp">kontaktiere vorher den Urheber</a>).</p></li>
</ul>
</div>

View File

@ -22,7 +22,7 @@ con alguien?</a></p>
<p><a href="#EmailDestination">¿Qué es un destino de correo electrónico? ¿Y qué pasa con las
direcciones de correo normales?</a></p>
<p><a href="#AddressLength">¿Por qué las direcciones de correo electrónico son tan largas?</a></p>
<p><a href="#AddressBook">Pero no puedo recordar esos destinos tan largos&hellip;</a></p>
<p><a href="#AddressBook">Pero no puedo recordar esos destinos I2P tan largos&hellip;</a></p>
<p><a href="#MultipleIdentities">¿Para qué sirve tener varias identidades de correo?</a></p>
<p>¿Qué tipo de cifrado es el mejor?</p>
<p><a href="#Algorithms">¿Qué algoritmos se usan para los cifrados simétricos y para el
@ -506,14 +506,18 @@ licenses/BouncyCastle.txt).</blockquote>
<p>(Ambas licencias son licencias libres y de código abierto.)</p>
<p>El código fuente se puede encontrar en el ramal (branch) <code>i2p.i2p-bote</code> de <a href="https://geti2p.net/es/get-involved/guides/new-developers#monotone">el repositorio Monotone de I2P</a>.
También hay una <a href="https://github.com/i2p/i2p.i2p-bote">réplica en GitHub</a>
que se puede usar para ver el código.</p>
<h3 id="Credits">¿Quén hizo I2P-Bote?</h3>
<p>(¡Ver también <a href="about.jsp">Créditos</a>!)</p>
<p>La concepción, diseño técnico, implementación e interfaz web de usuario
original, fueron realizados por HungryHobo, un desarrollador anónimo.
</p>
<p>HungryHobo, un desarrollador anónimo, hizo el concepto, el diseño técnico, la implementación y
la interfaz web. Para ofrecer ayuda o enviar feedback,
puedes contactarle usando I2P-Bote. Su clave de destino es:</p>
<p>El desarrollador actual de I2P-Bote es str4d.</p>
<p><b>hobo37SEJsEMfQHwcpVlvEgnrERGFz34GC1yjVyuRvl1QHnTi0UAoOtrLP~qkFY0oL59BBqj5sCep0RA8I5G8n</b></p>
<p>Para obtener respuesta o si quiere ofrecer ayuda, vea
<a href="about.jsp">la página Acerca de</a> para detalles de contacto.</p>
<h3 id="Languages">¿En qué idiomas está disponible?</h3>
<p>Inglés, alemán, ruso, francés, español, portugués, holandés,

View File

@ -22,8 +22,8 @@ de personnes choisies aléatoirement ? C'est une idée de fou !</a></p>
<p><a href="#AddressLength">Pourquoi les adresses sont-elles si longues ?</a></p>
<p><a href="#AddressBook">Mais je n'arrive pas à mémoriser de si longues destinations&hellip;</a></p>
<p><a href="#MultipleIdentities">Quel est l'intérêt d'utiliser de multiples identités ?</a></p>
<p><a href="#EncryptionTypes">Quel est le meilleur cryptage ?</a></p>
<p><a href="#Algorithms">Quels algorithmes sont-ils utilisés pour le cryptage symétrique
<p><a href="#EncryptionTypes">Quel est le meilleur chiffrement ?</a></p>
<p><a href="#Algorithms">Quels algorithmes sont utilisés pour le chiffrement symétrique
et le hachage ?</a></p>
<p><a href="#AntiSpam">Y a-t-il des protections anti-spam ?</a></p>
<p><a href="#HTML">Et au sujet du HTML et du formatage de texte ?</a></p>
@ -63,8 +63,8 @@ identités multiples et n'expose pas les en-têtes de messages. Il est
encore en phase de développement et n'est accessible que via la console
du routeur I2P. Il sera bientôt doté de la prise en charge de POP3, et
de davantage d'anonymat via une option de transport à haute latence. Tous
les messages bote sont automatiquement cryptés de bout en bout sans
avoir à régler de cryptage de mails (bien que cette option soit
les messages bote sont automatiquement chiffrés de bout en bout sans
avoir à régler de chiffrement de courrier électronique (bien que cette option soit
disponible), et ils sont authentifiés automatiquement. Comme il est
décentralisé, aucun serveur de mail ne peut faire de rapprochement
entre expéditeur et destinataire (profilage) : même les nœuds relayant
@ -100,18 +100,18 @@ besoin est déjà prêt.</p>
<p>Et ne vous y trompez pas, malgré son apparente simplicité et sa
réelle facilité d'utilisation, I2P-bote vous offre un niveau de
cryptage de qualité militaire et des options d'anonymat extrêmement
chiffrement de qualité militaire et des options d'anonymat extrêmement
efficaces.</p>
<h3 id="Sending">Que se passe-t-il quand je clique sur "Envoyer"?</h3>
<p>Le message est crypté et stocké sur des ordinateurs d'autres
<p>Le message est chiffré et stocké sur les ordinateurs d'autres
utilisateurs d'I2P-Bote. À partir de là, il est expédié au destinataire
quand il relève son courrier.</p>
<h3 id="RandomPeople">Une minute! Tous mes envois sont stockés dans les ordinateurs
de personnes choisies aléatoirement? C'est une idée de fou!</h3>
<p>Tout ce qu'elles peuvent voir n'est qu'un tas d'ordures car les
données sont cryptée à un niveau militaire. Seuls vous et le
données sont chiffrées à un niveau militaire. Seuls vous et le
destinataire savez ce qu'il y a dans le message. De plus, si vous
envoyez en ayant activé le relayage, il ne leur est même pas possible
de savoir qui l'a envoyé.</p>
@ -155,8 +155,8 @@ un fort niveau d'anonymat.</p>
<h3 id="GPG">Et au sujet de <a href="http://www.pgp.com/">PGP</a> et
<a href="http://gnupg.org/">GPG</a>?</h3>
<p>PGP et GPG vous permettent de crypter le courrier et de l'envoyer
par votre compte de messagerie existant. Il offrent du cryptage fort,
<p>PGP et GPG vous permettent de chiffrer le courrier et de l'envoyer
par votre compte de messagerie existant. Il offrent du chiffrement fort,
mais uniquement du corps du message, pas des en-têtes, ce qui veut dire
que les champs "Objet", le nom de votre ordinateur, et d'autres
informations ne sont pas protégées.</p>
@ -164,14 +164,14 @@ informations ne sont pas protégées.</p>
<p>Une autre faiblesse de PGP/GPG est qu'ils ne peuvent pas empêcher
de trouver qui parle à qui.</p>
<p>I2P-Bote, au contraire, crypte tout sauf la destination (en fait, même
<p>I2P-Bote, au contraire, chiffre tout sauf la destination (en fait, même
la destination n'est visible que par les nœuds qui ignorent de qui
vient le message). Il peut aussi envoyer le message via plusieurs
relais (comme <a href="http://mixmaster.sourceforge.net/">Mixmaster</a>),
de sorte que personne ne puisse trouver qui envoie à qui.</p>
<h3 id="UsingGPG">Puis-je toujours utiliser GPG/PGP avec I2P-Bote?</h3>
<p>Bien sûr. Cryptez le texte de votre message avec GPG avant de le coller
<p>Bien sûr. Chiffrez le texte de votre message avec GPG avant de le coller
dans le corps du message I2P-Bote, ou utilisez une application de
messagerie compatible GPG.</p>
@ -191,7 +191,7 @@ peut-être pour vous, aussi; décidez vous-même!), que:</p>
<li><p>mixminion car il est facile à utiliser et aussi simple à prendre
en main que nous avons pu.</p></li>
<li><p>les services de mail anonymes n'utilisant pas le routage basé sur
des clés de destination, car ils ne permettent pas le cryptage de bout en
des clés de destination, car ils ne permettent pas le chiffrement de bout en
bout.</p></li>
<li><p>les services centralisés, car que le serveur pourrait s'arrêter (à
cause d'attaques, de problèmes légaux, manque de financement ou
@ -205,7 +205,7 @@ inclue dans les messages que vous envoyez.</p>
<p>Les compteurs de transports à haute latence protègent des
attaques de timing.</p>
<p>Le cryptage de bout en bout et par saut, le relayage des paquets
<p>Le chiffrement de bout en bout et par saut, le relayage des paquets
pour d'autres nœuds, les paquets à taille unique* (bourrage/padding),
le débit d'envoi constant (messages de test et bidons/dummy)*, et un
rapport assez équilibré des taux d'envoi/réception* protègent des
@ -249,7 +249,7 @@ joindre.</p>
<h3 id="EmailDestination">Qu'est-ce qu'une destination? Et l'adresse mail?</h3>
<p>La longueur des destinations est comprise entre 86 et 512
caractères, suivant le type de cryptage. La prise en charge d'adresses
caractères, suivant le type de chiffrement. La prise en charge d'adresses
faciles à mémoriser et choisies par l'utilisateur est au programme d'un
futur proche.</p>
@ -257,17 +257,17 @@ futur proche.</p>
nom que l'utilisateur lui attribue. La clé publique est la destination,
votre identité pseudonymique. Un utilisateur réel peut en avoir
plusieurs. Elles servent à envoyer des messages à certains utilisateurs
- donc aussi appelés “destinations” - tout comme pour crypter les
messages qui leur sont&hellip; destinés. Votre destination est donc
- donc aussi appelés “destinations” - tout comme pour chiffrer les
messages qui leur sont destinés. Votre destination est donc
pour les autres aussi la clé qu'ils utilisent pour crypter les messages
qu'ils vous envoient et pour pour vérifier l'intégrité et
l'authenticité de ceux qu'ils reçoivent&hellip; de vous.</p>
l'authenticité de ceux qu'ils reçoivent de vous.</p>
<p>Il est sans danger (et indispensable) de donner votre destination
à toute personne de laquelle vous voulez recevoir du courrier.</p>
<p>Il est important de faire la distinction entre votre destination
de messagerie et la destination de votre routeur I2P! Votre identité de
de messagerie et la destination de votre routeur I2P ! Votre identité de
messagerie n'a rien à voir avec l'identité de votre nœud/routeur
I2P-Bote qui est utilisée pour permettre aux nœuds I2P-Bote de se
contacter les uns les autres pour constituer le réseau Bote.</p>
@ -286,8 +286,8 @@ réduirait à néant le niveau d'anonymat supplémentaire qu'I2P-Bote porte
en lui-même!</p>
<h3 id="AddressLength">Pourquoi les adresses sont-elles si longues?</h3>
<p>Dans I2P-Bote chaque message est (automatiquement) crypté. Pour vous
éviter d'avoir à échanger votre adresse <b>ET</b> de très longues clés
<p>Dans I2P-Bote chaque message est (automatiquement) chiffré. Pour vous
éviter d'avoir à échanger votre adresse <b>et</b> de très longues clés
publiques, on a simplement fait de ces clés les adresses. Deux autres
avantages en découlent: vous n'avez pas à vous soucier de la
préexistence de votre adresse (au moins tant que vous ne recevez ni
@ -299,16 +299,16 @@ elle n'est que la clé publique, que certains peuvent avoir à connaître,
sans pour autant que cela compromette la confidentialité de vos
messages.</p>
<p>L'utilisation du cryptage ECC conduit à des clés plus courtes.</p>
<p>L'utilisation du chiffrement ECC conduit à des clés plus courtes.</p>
<h3 id="AddressBook">Mais je n'arrive pas à mémoriser de si longues destinations&hellip;</h3>
<p>Le carnet d'adresses est là pour ça. Une fois convaincu par le
principe d'I2P-Bote, vous apprécierez le cryptage et l'authentification
principe d'I2P-Bote, vous apprécierez le chiffrement et l'authentification
intégrés, qui ne peuvent être atteints que par l'utilisation de clés
cryptographiques.</p>
<p>Encore une fois, l'alternative serait d'avoir des adresses courtes et
simples <b>plus</b> de longues clés de cryptage et authentification, <b>ET</b>
simples <b>plus</b> de longues clés pour le chiffrement et l'authentification, <b>et</b>
de se reposer sur quelqu'autorité pour faire la relation entre
l'adresse et un destinataire anonyme.</p>
@ -330,12 +330,12 @@ de communications, vous avez besoin d'un super niveau d'anonymat, et
c'est là qu'une autre identité avec un relayage et des délais différents
peut être utile.</p>
<h3 id="EncryptionTypes">Quel est le meilleur cryptage?</h3>
<p><a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a>
<h3 id="EncryptionTypes">Quel est le meilleur chiffrement ?</h3>
<p><a href="https://fr.wikipedia.org/wiki/Cryptographie_sur_les_courbes_elliptiques">ECC</a>
à 256 bits produit des adresses destinations courtes et maniables, et
est considéré comme plus solide que l'ElGamal à 2048 bits.</p>
<p><a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a>
<p><a href="https://fr.wikipedia.org/wiki/Cryptographie_sur_les_courbes_elliptiques">ECC</a>
à 521 bits est plus solide que sa version à 256 bits, mais il génère
des destinations (clés) très longues.</p>
@ -345,12 +345,12 @@ faible des trois algorithmes. Cependant, ElGamal fait l'objet de plus
recherches que ECC, ce qui rend moins probable qu'une faiblesse de cet
algorithme passe inaperçue pendant plus longtemps que dans ECC.</p>
<h3 id="Algorithms">Quels algorithmes sont-ils utilisés pour le cryptage symétrique
et le hachage?</h3>
<p><a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES-256</a>
<h3 id="Algorithms">Quels algorithmes sont utilisés pour le chiffrement symétrique
et le hachage ?</h3>
<p><a href="https://fr.wikipedia.org/wiki/Advanced_Encryption_Standard">AES-256</a>
en mode
<a href="http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29">
CBC</a> et <a href="http://en.wikipedia.org/wiki/SHA-2">SHA-256</a>.</p>
CBC</a> et <a href="https://fr.wikipedia.org/wiki/SHA-2">SHA-256</a>.</p>
<h3 id="AntiSpam">Y a-t-il des protections anti-spam?</h3>
<p>I2P-Bote ne filtre pas le spam, mais le fait que l'envoi en masse doive
@ -540,15 +540,18 @@ licenses/BouncyCastle.txt).</blockquote>
<p>(Toutes deux sont des licences libres et ouvertes).</p>
<p>Le code source est disponible dans la branche <code>i2p.i2p-bote</code> du
<a href="https://geti2p.net/en/get-involved/guides/new-developers#monotone">dépôt Monotone d'I2P</a>.
Il existe aussi un <a href="https://github.com/i2p/i2p.i2p-bote">miroir GitHub</a>
qui peut être utilisé afin de voir le code.</p>
<h3 id="Credits">Qui a créé I2P-Bote?</h3>
<p>(Voir aussi les <a href="about.jsp">"Remerciements"</a>!)</p>
<p>La conception, le design technique, la mise en œuvre et l'interface web utilisateur d'origine
ont été faits par HungryHobo, un développeur anonyme.</p>
<p>La conception, la structure technique, l'implémentation et
l'interface web user sont de HungryHobo, un développeur anonyme. Pour
les retours techniques ou proposer votre aide, vous pouvez le contacter
avec I2P-Bote. Sa destination est:</p>
<p>Le développeur actuel d'I2P-Bote est str4d.</p>
<p><b>hobo37SEJsEMfQHwcpVlvEgnrERGFz34GC1yjVyuRvl1QHnTi0UAoOtrLP~qkFY0oL59BBqj5sCep0RA8I5G8n</b></p>
<p>Pour envoyer du feedback ou si vous voulez offrir de l'aide, voyez
<a href="about.jsp">la page A propos</a> pour les détails concernant la prise de contact.</p>
<h3 id="Languages">Langues disponibles</h3>
<p>Anglais, allemand, russe, français, espagnol, portugais,

View File

@ -0,0 +1,509 @@
<div>
<h1>Часто задаваемые вопросы</h1>
<nav><p><a href="#What">Что такое I2P-Bote?</a></p>
<p><a href="#Name">Почему он называется I2P-Bote?</a></p>
<p><a href="#Why">Почему I2P-Bote?</a></p>
<p><a href="#Sending">Что произойдет с электронным письмом после нажатия "Отправить"?</a></p>
<p><a href="#RandomPeople">Подождите-ка, все письма, которые я отправляю сохранены на чьем-то жестком диске? Это не самая лучшая идея!</a></p>
<p><a href="#HowItWorks">Как это работает?</a></p>
<p><a href="#NothingToHide">Почему я должен пользоваться этим? Мне нечего скрывать&hellip;</a></p>
<p><a href="#GPG">Что насчет PGP и GPG?</a></p>
<p><a href="#UsingGPG">Могу ли я использовать GPG/PGP с I2P-Bote?</a></p>
<p><a href="#Susimail">Чем это отличается от Susimail?</a></p>
<p><a href="#Comparison">Почему I2P-Bote лучше?</a></p>
<p><a href="#Safeguards">Находится ли мой идентификатор в безопасности , когда я обмениваюсь с кем-либо почтой ?</a></p>
<p><a href="#How">Как им пользоваться?</a></p>
<p><a href="#EmailClients">Могу ли я пользоваться программами наподобие Thunderbird?</a></p>
<p><a href="#Attachments">Могу ли я прикреплять файлы, и какое ограничение на них?</a></p>
<p><a href="#CreateIdentity">Как мне создать аккаунт для электронной почты?</a></p>
<p><a href="#EmailDestination">Что, Destination это моя электронная почта? Как насчет обычных адресов электронной почты?</a></p>
<p><a href="#AddressLength">Почему адрес у почты такой длинный?</a></p>
<p><a href="#AddressBook">Но я не могу запомнить тех длинных адресатов&hellip;</a></p>
<p><a href="#MultipleIdentities">В чём смысл использования нескольких почтовых идентификаторов?</a></p>
<p><a href="#EncryptionTypes">Какой тип шифрования является наилучшим?</a></p>
<p><a href="#Algorithms">Какие алгоритмы используются для симметричного шифрования, а какие для хеширования ?</a></p>
<p><a href="#AntiSpam">У них есть анти-спам?</a></p>
<p><a href="#HTML">Как насчет HTML или стилизированного текста?</a></p>
<p><a href="#Persistence">Как долго хранятся письма?</a></p>
<p><a href="#DoIdentitiesExpire">Когда истечет почтовый идентификатор?</a></p>
<p><a href="#Gateways">Могу ли я отправлять, и получать письма из обычного интернета?</a></p>
<p><a href="#Postman">Могу я посылать электронные письма и получать электронные письма используя традиционные учетные записи почты postman-а внутри I2P (@mail.i2p)?</a></p>
<p><a href="#Know">What does it mean when Know is x'ed for a mail in my
inbox?</a></p>
<p><a href="#Terms">Что означает “BktPfx”, “Distance” и “Locked?”</a></p>
<p><a href="#Anonymous">Что я могу сделать для большей анонимности?</a></p>
<p><a href="#Timestamps">Как мне не отправлять метки времени?</a></p>
<p><a href="#Backups">Как я могу переместить свои параметры и и данные на другой
компьютер, или сделать резервную копию?</a></p>
<p><a href="#MailRoutes">Каков <em>почтовый маршрут</em>?</a></p>
<p><a href="#HighLatency">Что такое high-latency transport?</a></p>
<p><a href="#Latencies">Что здесь с задержками и как можно ими управлять (если вообще возможно)?</a></p>
<p><a href="#WhyI2P">Если I2P-Bote сам по себе обеспечивает анонимность, зачем ему нужен I2P?</a></p>
<p><a href="#WithoutRoutes">Насколько анонимно/безопасно I2P-Bote без почтовых маршрутов</a></p>
<p><a href="#OpenSource">У I2P-Bote открытый исходный код?</a></p>
<p><a href="#Credits">Кто сделал I2P-Bote?</a></p>
<p><a href="#Languages">Какие языки доступны?</a></p>
<p><a href="#Translate">Как я могу помочь перевести I2P-Bote на мой язык?</a></p>
<p><a href="#Technical">Как это работает на техническом уровне?</a></p>
<p><a href="#GetInvolved">Какими способами я еще могу помочь?</a></p>
</nav><h3 id="What">Что такое I2P-Bote?</h3>
<p>P2P почтовая программа спроектирована защитить вашу приватность.</p>
<p>I2P-Bote is an end-to-end encrypted, network-internal, fully
decentralized (serverless) e-mail system. It supports different
identities and does not expose e-mail headers. Currently, it is
still alpha software. It can be accessed via web console, and it
has IMAP and SMTP support, so bote-mails can be read and written by
regular email clients. It is planned to guarantee additional
anonymity by providing a high-latency transport option. All
bote-mails are automatically end-to-end encrypted, so that there's
no need to set up e-mail encryption (though the option does exist),
and bote-mails will be authenticated automatically. As it is
decentralized, there is no e-mail server that could link different
e-mail identities as communicating with each other (profiling):
Even the nodes relaying the mails will not know the sender and
apart from sender and receiver, only the end of the high-latency
mail tunnel and the storing nodes will know to whom (anonymous
identity) the mail is destined. The original sender can have gone
offline, long before the mail becomes available on the other side.
This adds on the degree of anonymity that can be reached with
I2P-Bote. For those who do not want high delays: All these settings
are be user-adjustable, so each user decides on how much anonymity
he wants.</p>
<h3 id="Name">Почему он называется I2P-Bote?</h3>
<p>Bote — это немецкое слово для обозначения средства рассылки.</p>
<h3 id="Why">Почему I2P-Bote?</h3>
<p>Because it's cool. And because I2P was lacking a decentralized
e-mail service, and seeing the creation of such as an opportunity
to improve on neglected anonymity aspects, it was decided to add an
optional high-latency transport. You can use a normal e-mail
account and end-to-end encrypt your mails, but they are still not
anonymous. You can use anonymous server-bound e-mails, yet they are
not automatically end-to-end encrypted.</p>
<p>Или вы можете использовать I2P-Bote, в котором ваши почтовые сообщения анонимны и <em>автоматически</em> шифруются сквозным шифрованием.</p>
<p>В отличие от стандартных почтовых систем нет никакой необходимости устанавливать дополнительное приложение для управления ключами. Все, в чем Вы нуждаетесь, уже там.</p>
<p>Но несмотря то, что это программное обеспечение является простым и легким для использования, оно предлагает шифрование милитари-уровня и опции для чрезвычайно сильной анонимности.</p>
<h3 id="Sending">Что происходит с электронной почтой после того, как я нажму 'Send'?</h3>
<p>Почта зашифровывается и хранится на компьютерах других участников I2P-Bote. Оттуда она доставляется получателям, когда они проверяют свою электронную почту.</p>
<h3 id="RandomPeople">Вся почта, которую я отправляю, сохраняется на жестких дисках у каких-то случайных людей? Звучит глупо!</h3>
<p>Это не так: всё, что они увидят — мусорные, случайные данные, так как используется шифрование военного уровня. Только вы и получатель знают, что содержится в письме. Кроме того, если вы отправляете письмо с использованием ретрансляторов, то становится невозможно определить, кто его отправитель.</p>
<p>Between this and using an email account with a
<a href="http://www.theregister.co.uk/2009/12/07/schmidt_on_privacy/">company
that doesn't respect your privacy</a>, over an internet line that
<a href="http://www.eff.org/issues/nsa-spying">is being spied on by
shady agencies</a>, which would you say is more trustworthy?</p>
<h3 id="HowItWorks">Как это конкретно работает?</h3>
<p>Смотри главу <a href="userGuide.jsp#Technical-Concept">'Техническую концепцию'</a>
<a href="userGuide.jsp">Руководства пользователя</a>.</p>
<p>In short: I2P-Bote nodes form a P2P-network, relaying mail packets
for one another and storing them into a DHT.</p>
<h3 id="NothingToHide">Зачем мне пользоваться этим? Мне нечего скрывать&hellip;</h3>
<p>Потому что Вы бы не выходили на улицу голым, верно?</p>
<p>Хорошо, может быть вы бы и сделали это. Но дело в том, что иногда вы хотите сделать вашу личную переписку по почте секретной и непрослеживаемой, и не хотите чтобы весь мир знал о чем вы написали.</p>
<p>И иногда вы попросту хотите общаться с полной анонимностью с другими.</p>
<p>Следовательно I2P-Bote является идеальным инструментом, дающим вам чертовски большую защиту при сохранении гибкости.</p>
<p>Он направлен на предоставление профессиональной безопасности военного класса и простым юзабилити: у Вас могут быть параноидальные настройки, где он принимает почту вечность, чтобы прибыть; или иметь быструю связь при этом наслаждаться очень высокой анонимностью.</p>
<p>Вам решать - легко с щелчком мыши.</p>
<h3 id="GPG">Что насчет <a href="http://www.pgp.com/">PGP</a> и
<a href="http://gnupg.org/">GPG</a>?</h3>
<p>PGP и GPG позволяет Вам шифровать письма и отправлять их через ваш существующий почтовый аккаунт. Они предлагают сильное шифрование, но шифруют только содержание письма, не заголовки, что означает главное, имя вашего компьютера, и и другую незащищенную информацию.</p>
<p>Другие ошибки приватности это то, что PGP/GPG не может предотвратить желающего разобраться в том, кто с кем говорит.</p>
<p>I2P-Bote, in contrast, encrypts everything but the recipient's
Email Destination. (In fact even the recipient's destination is
only visible to nodes who do not know who the sender of the mail
was.) It also has the ability to send an email through several
relays (similar to
<a href="http://mixmaster.sourceforge.net/">Mixmaster</a>), so nobody can
find out who is sending email to whom.</p>
<h3 id="UsingGPG">Могу ли я дальше использовать GPG/PGP с I2P-Bote?</h3>
<p>Конечно. Либо использовать GPG шифрование вашего текста писем прежде чем вставить его в поле I2P-Bote, либо использовать почтовое приложение с поддержкой GPG. </p>
<h3 id="Susimail">Чем он отличается от Susimail?</h3>
<p>I2P-Bote лучше, потому что у него выше номер версии. Шутка.</p>
<p>I2P-Bote предлагает больше приватности, но Susimail имеет больше фич, которых нет в I2P-Bote (см. ниже), и Susimail является более эффективной полосой пропускания, потому что он не хранит письма избыточно.</p>
<h3 id="Comparison">Почему I2P-Bote лучше?</h3>
<p><em>Мы</em>думаем он лучше для <em>нас</em> (и возможно для вас тоже;
решайте сами!), чем:</p>
<ul>
<li><p>Mixminion as it is easy to use and as n00b-proof as
we could get it.</p></li>
<li><p>anonymous e-mail services not based on destination
key routing: as those do not deliver built-in end-to-end
encryption.</p></li>
<li><p>centralized services, as the server could go down
(due to attacks, legal problems, lack of funding or interest, &hellip;)
and the server admin has too many means to do profiling.</p></li>
</ul>
<h3 id="Safeguards">How is my identity kept safe when I exchange mail with
someone?</h3>
<p>Never is your IP address or even your I2P-destination included in
any e-mail you send.</p>
<p>The high-latency transport counters timing attacks.</p>
<p>End-to-end encryption, per-hop encryption, relaying packets for
other nodes, one single packet size* (padding), a constant rate of
sending (test and dummy messages)*, and a rather balanced
incoming/outgoing ratio* counter traffic analysis attacks, and in
combination with per-hop delays, I2P-Bote offers good means against
intersection attacks.</p>
<p>Способ распространения I2P-Bote - open source, гарантирует, что Вы сами можете
посмотреть его реализацию и проверить его на ошибки.</p>
<p>*[пока не реализовано]</p>
<h3 id="How">Как им пользоваться?</h3>
<p>Читайте <a href="userGuide.jsp">мануал</a> или смотрите другие вопросы и ответы здесь!</p>
<p>Если у вас остались неотвеченные вопросы , спросите их на форуме:
<a href="http://forum.i2p/viewforum.php?f=35">http://forum.i2p/viewforum.php?f=35</a></p>
<h3 id="EmailClients">Могу ли я пользоваться программами наподобие Thunderbird?</h3>
<p>Да, вы можете использовать почтовыми программами на ваш выбор, если они поддерживают IMAP и SMTP.</p>
<h3 id="Attachments">Могу ли я прикреплять файлы, и какое ограничение на них?</h3>
<p>Да, вложения поддерживаются с версии 0.2.5. Общий размер файлов должен быть маленьким, лучше если бы он был меньше 500Кб.</p>
<h3 id="CreateIdentity">Как мне создать аккаунт для электронной почты?</h3>
<p>I2P-Bote calls them Email Identities. You can create one in the
I2P-Bote web interface under the "Identities" link. The reason why
it's not called an account is that there is no provider like GMail
or GMX. You alone hold the (cryptographic) keys to the Email
Identity.</p>
<p>When you create an Email Identity, I2P-Bote generates a string of
numbers and letters called an Email Destination. This is the
address you can be reached at.</p>
<p>Пример: <code>wsq-8u5bTWbaOsrS0JuXRKL-RsbTkckV4W7u2mIu0Yrlfetixq1F~03CArnvbd6tDWwjPHYEuoKyWqwxplSdix</code></p>
<h3 id="EmailDestination">What's an Email Destination? What about email addresses?</h3>
<p>Email destinations (aka bote dests) are between 86 and 512
characters long, depending on the type of encryption. Support for
easy-to-remember, user-chosen addresses is planned for the near
future.</p>
<p>The e-mail identities consist of public and private keys, as well
as a name the user chooses for it. The public part is your e-mail
destination, your pseudonymous identity. And one real user can have
more than one of those identities. They serve for addressing mails
to certain users - therefore it is referred to as a
'destination' or short 'dest' - as well as for encrypting
the mails for them. Hence, your e-mail destination is the key
others use in order to encrypt mails which they send to you, and in
order to verify the authenticity and integrity of mails they
receive from you.</p>
<p>It is safe to give your e-mail destination to anybody you want to
get e-mails from.</p>
<p>It is important to distinguish between the mail dest and the router
id! Your I2P-Bote mail identity is not related to your I2P-Bote
router/node id, which is used for I2P-Bote nodes to contact each
other and this way for the Bote network.</p>
<p>If you have problems with your I2P-Bote app in the highly
unlikely case it should be necessary you can tell your I2P-Bote
router id in irc2p, I2P's IRC channels, or the forum or manually
add other peer's id's in order to connect, though until now this
has never been necessary.</p>
<p>It is <b>not linked to your IP</b>. Nonetheless, do not relate your
I2P-Bote router id with your I2P-Bote mail dests since this might
destroy the additional anonymity I2P-Bote itself generates!</p>
<h3 id="AddressLength">Почему e-mail адреса такие длинные?</h3>
<p>In I2P-Bote every mail is (automatically) encrypted. In order not
to require you to exchange an e-mail address <b>and</b> a long key,
we simply made that key the address. This comes with two additional
benefits: You won't have to worry if an e-mail address is already
taken or not (at least not if you do not send or receive e-mails to
or from the internet) and you don't need a key management app
apart, for taking care of your keys.</p>
<p>It is safe to give away this key, as it is only the public key
which everybody may know about without compromising your e-mails'
secrecy.</p>
<p>Using the ECC encryption as option will yield shorter e-mail
destination keys.</p>
<h3 id="AddressBook">But I cannot remember those long destinations&hellip;</h3>
<p>That's what the integrated address book is there. Once you have
become more acquainted with I2P-Bote, you will appreciate the
built-in encryption and authentication, which can only be achieved
using cryptographic keys.</p>
<p>Again, the alternative would be to have short and easy addresses
<b>plus</b> a long key for encryption and authentication,
<b>and</b> to rely on some authority to map the e-mail addresses to
some anonymous recipient.</p>
<h3 id="MultipleIdentities">What's the point of using multiple mail identities?</h3>
<p>I2P-Bote is not an instant messenger, so you can have several
identities without having to keep many tunnels open. Only for
fetching requests you'd use up more resources but at the same time
provide more cover for others.</p>
<p>Now, imagine you communicate with your friends unobservedly (see:
data retention laws) via I2P-Bote, and want to quickly send out a
mail that you'll be meeting each other in a different location
tonight. Then, you need no super-anonymity and can renounce mail
routes and delays. Your friends, on the other hand, would want to
have a shorter check interval, so they will receive the mail in
time. Yet you still want super high anonymity for some of your
other communications - that's where a different mail identity with
mail routes, delays and long check intervals comes in handy.</p>
<h3 id="EncryptionTypes">Какой тип шифрования является лучшим?</h3>
<p>256-bit <a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a>
produces short and handy Email Destinations, and it is considered
stronger than 2048-bit ElGamal.</p>
<p>521-bit <a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a>
is stronger than 256-bit ECC, but it makes Email Destinations
longer.</p>
<p>2048-bit <a href="http://en.wikipedia.org/wiki/ElGamal">ElGamal</a>
produces even longer Email Destinations, and it is the
cryptographically weakest of the three options. However, ElGamal is
better researched than ECC, which makes it less likely that there
is an unknown weakness in ElGamal than in ECC.</p>
<h3 id="Algorithms">What algorithms are used for symmetric encryption, and
for hashing?</h3>
<p><a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES-256</a>
in <a href="http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29">
CBC</a> mode and <a href="http://en.wikipedia.org/wiki/SHA-2">SHA-256</a>.</p>
<h3 id="AntiSpam">У них есть анти-спам?</h3>
<p>I2P-Bote does no active spam filtering, but the fact that mass
emails have to be sent individually should discourage spammers.
Another line of defense is
<a href="http://www.hashcash.org/">HashCash</a> which is supported at the
protocol level and may be implemented in a future version if spam
becomes a problem.</p>
<h3 id="HTML">Как насчет HTML или стилизованного текста?</h3>
<p>Веб-интерфейс не представляет HTML.</p>
<h3 id="Persistence">Сколько времени доступны электронные письма ?</h3>
<p>Электронные письма доступны в течение 100 дней после того, как они были отправлены. К тому времени не загруженные письма будут удалены.</p>
<p>Электронные письма, которые Вы получили, остаются на Вашей локальной машине,
пока Вы не удалите их.</p>
<h3 id="DoIdentitiesExpire">Когда заканчивается время действия идентификатора?</h3>
<p>Никогда.</p>
<h3 id="Gateways">Могу я посылать электронное письмо и получать электронное письмо от обычного
почтового сервера из интернета?</h3>
<p>Нет, но ведется работа над этим.</p>
<!-- Yes. You can both send and receive mails to/from ordinary internet e-mail accounts -->
<h3 id="Postman">Могу я посылать электронные письма и получать электронные письма через postman-а,
используя традиционные почтовые аккаунты в I2P (@mail.i2p)?</h3>
<p>Нет, но также ведется работа над этим.</p>
<!-- Yes. You can both send and receive mails to/from some_name@mail.i2p addresses -->
<h3 id="Know">What does it mean when Know is x'ed for a mail in my
inbox?</h3>
<p>When the sender's destination is not known locally the mail is
marked by an x in the “Know” column or by putting “{UNK}” before
the sender's address in IMAP.</p>
<p>This means that you have no proof this user is really who he claims
to be, in his user name. Of course, if the signature is valid, you
know he possesses the destination key with which the mail was
signed, and that the mail content is from that person. But you
cannot rely on the short name here. In case you had gotten a mail
from a user with this name before, you cannot be sure it is the
same user this time, even if the signature is valid. In this case
you must compare the destination keys or add them to your
addressbook. A user not locally known, is not necessarily evil, but
you shouldn't trust it's the user you might think it is. But, if
verified against locally stored keys, you know it's the same user
when you receive another mail from him and “Know” has a green
check.</p>
<h3 id="Terms">What do “BktPfx”, “Distance” and “Locked?” mean?</h3>
<ul>
<li><p>BktPfx = BucketPrefix</p></li>
<li><p>Distance: the distance of an I2P-Bote node to your
own node in keyspace</p></li>
<li><p>Locked: If a node is not reachable for whatever
reason, it is marked as locked, plus the time it has been found
unreachable.</p></li>
</ul>
<h3 id="Anonymous">Что я могу сделать, чтобы быть более анонимным?</h3>
<ul>
<li><p>Don't send identifying information about you! (name, address,
photos, geographic location, time zone, age, sex, websites, login
names, I2P router id, I2P-Bote id, Files that contain author
information about you, &hellip;)</p></li>
<li><p>don't send personal information or information that only you can
possess,</p></li>
<li><p>оставьте I2P-Bote работающим 24/7,</p></li>
<li><p>use mailroutes with randomized per-hop delays and/or per-hop
fixed send times, [not yet fully implemented]</p></li>
<li><p>используйте продолжительный интервал проверки,</p></li>
<li><p>use a long local delay for own packets,</p></li>
<li><p>use a big check interval randomization. [not yet implemented]</p></li>
<li><p>suppress the sending of date and time in the e-mails' header,</p></li>
<li><p>suppress translation of markers like “Re:” into another
language,</p></li>
<li><p>watch your language and writing style,</p></li>
<li><p>используйте различные почтовые идентификационные данные,</p></li>
<li><p>consider discarding e-mail identities after longer periods of
usage,</p></li>
<li><p>&hellip;</p></li>
</ul>
<p>This list is not intended to make you paranoid, but to show you where
anonymity can be reduced.</p>
<h3 id="Timestamps">Как мне не отправлять метки времени?</h3>
<p>Перейдите к параметрам настройки и отключите отправку меток времени. У будет иметь такой эффект, что Ваша почта не будет содержать дату или время
отправка.</p>
<!-- <p>(When using mailroutes, the timestamps are automatically disabled.) [not yet implemented]</p> -->
<h3 id="Backups">Как как мне перенести мои параметры и данные на другой
компьютер, или сделать резервную копию?</h3>
<p>I2P-Bote хранит всю электронную почту и другие данные в <code>i2pbote</code>
папке. На Windows эта папка находится по адресу
<code>%APPDATA%\I2P\i2pbote</code>; в Linux все это находится по адресу
<code>$HOME/.i2p/i2pbote</code>.</p>
<p>To back up or migrate everything, just copy the whole
<code>i2pbote</code> folder.</p>
<p>If you are only interested in your Email Identities, copy the file
<code>identities.txt</code>. For the address book, copy
<code>addressBook.txt</code>.</p>
<h3 id="MailRoutes">Каков <em>почтовый маршрут</em>?</h3>
<p>Смотри: Что такое high-latency transport?</p>
<!-- <p>(When using mail routes, the timestamps are automatically disabled.) [yet to be implemented]</p> -->
<h3 id="HighLatency">Что такое high-latency transport?</h3>
<p>It means that you can enable an option where e-mail packets are not
sent directly to storing nodes, but are relayed (forwarded) by
other peers (who cannot read the e-mails, as they are encrypted
with several layers and ripped into small parts), who do not send
them on immediately but wait a user-specified time - in case of
sending specified by the sender, in case of receiving specified by
recipient.</p>
<p>Therefore it takes the mail some time to arrive. Thus an attacker
cannot simply run stats on node uptimes (who was connected when)
and times a message was received to be stored (which in a
low-latency environment would be about the time it was sent), in
order to uncover the real life identities behind I2P-Bote e-mail
identities.</p>
<h3 id="Latencies">What latencies are there, and how can they be controlled
(if at all)?</h3>
<p>I2P-Bote is distributed and running on top of the I2P network, so
it takes some time. Speed is not our strength, but we compare well
with other anon mail systems. Without mail routes enabled it takes
3 to 10 minutes from hitting the “Send” button to being displayed
in the receiver's inbox.</p>
<p>If speed is what you want, fully disable mail routes or set them to
the minimum number of hops and minimum per-hop delay you can live
with.</p>
<h3 id="WhyI2P">If I2P-Bote generates its own anonymity, why does it
need I2P?</h3>
<p>I2P-Bote is built on top of I2P mainly for five reasons:</p>
<ul>
<li><p>I2P was lacking a decentralized e-mail service and
HungryHobo is an I2P user.</p></li>
<li><p>I2P offers very good anonymity, is mature and
incorporates years of experience.</p></li>
<li><p>So being on top of it, kind of represents an anonymity
fall-back even if there were some crucial bugs in I2P-Bote.</p></li>
<li><p>Flexibility: We want to offer an easy way to
anonymous low-latency e-mail communication as well, with still a
high level of protection.</p></li>
<li><p>I2P with it the many other apps running on top of
it creates a lot of traffic that blends with I2P-Bote traffic.</p></li>
<li><p>Even I2P-Bote relays are thus location-hidden.</p></li>
</ul>
<h3 id="WithoutRoutes">Насколько анонимен/безопасен I2P-Bote без почтовых маршрутов?</h3>
<p>Pretty anonymous and very secure.</p>
<p>It then basically enjoys the same anonymity other apps have on I2P,
the anonymity provided by the I2P router which is rather strong
anonymity already. However, I2P is a low-latency network, with all
the shortcomings a low-latency network comes with by its very
nature. There are attacks against which I2P cannot protect you or
not protect you very reliably. I2P-Bote does its best to augment
I2P anonymity with its high-latency transport option, which make
if enabled I2P-Bote mails <em>paranoidly</em> anonymous.</p>
<h3 id="OpenSource">У I2P-Bote открытый исходный код?</h3>
<p>Естественно!</p>
<blockquote>Это программное обеспечение распространяется под лицензией GPL версии 3 (см.
licenses/GPLv3.txt), кроме BouncyCastle Provider который распространяется под the Bouncy Castle License (см.
licenses/BouncyCastle.txt).</blockquote>
<p>(Оба под свободными лицензиями)</p>
<p>The source code can be found in the <code>i2p.i2p-bote</code> branch of
<a href="https://geti2p.net/en/get-involved/guides/new-developers#monotone">the I2P Monotone repository</a>.
There is also a <a href="https://github.com/i2p/i2p.i2p-bote">GitHub mirror</a>
which can be used to view the code.</p>
<h3 id="Credits">Кто сделал I2P-Bote?</h3>
<p>Conception, technical design, implementation and original web user interface
were done by HungryHobo, an anonymous developer.</p>
<p>The current developer of I2P-Bote is str4d.</p>
<p>For feedback or if you want to offer help, see
<a href="about.jsp">the About page</a> for contact details.</p>
<h3 id="Languages">Какие языки доступны?</h3>
<p>Английский, немецкий, русский, французский, испанский, португальский, нидерландский, шведский, китайский и арабский.</p>
<h3 id="Translate">Как я могу помочь перевести I2P-Bote на мой язык?</h3>
<p>Translations are done the same way as the rest of I2P. If you would
like to help and have questions, please <a href="about.jsp">contact the author.</a></p>
<h3 id="Technical">Как это работает на техническом уровне?</h3>
<p>Have a look at the file <code>doc/techdoc.txt</code> in the source code.</p>
<h3 id="GetInvolved">Какими способами я еще могу помочь?</h3>
<ul>
<li><p>Используйте I2P-Bote и оставьте свой отзыв</p></li>
<li><p>Tell your friends, family, collegues et al. about I2P-Bote and lend them a hand</p></li>
<li><p>Mention I2P-Bote on your blog, eepsite or website</p></li>
<li><p>Write a user's guide or improve the technical documentation</p></li>
<li><p>Add features or fix bugs (<a href="about.jsp">contact the author first</a>).</p></li>
</ul>
</div>

View File

@ -0,0 +1,347 @@
<div>
<h1>Vanliga frågor</h1>
<nav><p><a href="#What">Vad är I2P-Bote?</a></p>
<p><a href="#Name">Varför heter det I2P-Bote?</a></p>
<p><a href="#Why">Varför I2P-Bote?</a></p>
<p><a href="#Sending">Vad händer med ett email after att jag klickat på 'Skicka'?</a></p>
<p><a href="#RandomPeople">Vänta nu, alla mail jag skickar lagras på någon okänd persons hårddisk? Det låter som en riktigt dålig idé</a></p>
<p><a href="#HowItWorks">Hur fungerar det egentligen?</a></p>
<p><a href="#NothingToHide">Varför skall jag använda det? Jag har ingenting att dölja&hellip;</a></p>
<p><a href="#GPG">Hur är det med PGP och GPG?</a></p>
<p><a href="#UsingGPG">Kan jag använda PGP/GPG med I2P-Bote?</a></p>
<p><a href="#Susimail">Vad är skillnaden mot Susimail??</a></p>
<p><a href="#Comparison">Varför är I2P-Bote bättre?</a></p>
<p><a href="#Safeguards">Hur skyddas min identitet när jag skickar mail till någon?</a></p>
<p><a href="#How">Hur andvänder jag det?</a></p>
<p><a href="#EmailClients">Kan jag använda ett mailprogram som Thunderbird?</a></p>
<p><a href="#Attachments">Kan jag skicka bilagor och vilka begränsningar finns det?</a></p>
<p><a href="#CreateIdentity">Hur skapar jag ett email-konto?</a></p>
<p><a href="#EmailDestination">Vad är en email-destination? Hur är det med email-adresser?</a></p>
<p><a href="#AddressLength">Varför är email-adresserna så långa?</a></p>
<p><a href="#AddressBook">Men jag kan inte komma ihåg dom långa destinationerna&hellip;</a></p>
<p><a href="#MultipleIdentities">Vad är poängen med att använda flera mail-identiteter??</a></p>
<p><a href="#EncryptionTypes">Vilken typ av kryptering är bäst?</a></p>
<p><a href="#Algorithms">Vilka algoritmer används för symmmetrisk kryptering och för hashing?</a></p>
<p><a href="#AntiSpam">Finns det några motåtgärder mot spam?</a></p>
<p><a href="#HTML">Hur är det med HTML och formaterad text?</a></p>
<p><a href="#Persistence">Hur länge lagras email?</a></p>
<p><a href="#DoIdentitiesExpire">När går email-identiteter ut?</a></p>
<p><a href="#Gateways">Kan jag skicka och ta emot mail från vanliga email-servrar på internet?</a></p>
<p><a href="#Postman">Kan jag skicka och ta emot mail från postmans traditionella I2P mail-konton?</a></p>
<p><a href="#Know">Vad betyder det när Känd är förkryssad i min inbox?</a></p>
<p><a href="#Terms">Vad betyder “BktPfx”, “Distance” and “Locked?”</a></p>
<p><a href="#Anonymous">Hur kan jag bli mer anonym?</a></p>
<p><a href="#Timestamps">Hur undviker jag att skicka timestamps?</a></p>
<p><a href="#Backups">Hur flyttar jag mina inställningar och data till en annan dator? Hur gör jag en backup?</a></p>
<p><a href="#MailRoutes">Vad är en <em>mailrutt</em>?</a></p>
<p><a href="#HighLatency">Vad betyder transport med hög latens?</a></p>
<p><a href="#Latencies">Vilka latenser finns det och hur kan de kontrolleras (om alls)?</a></p>
<p><a href="#WhyI2P">Om Bote skapar sin egen anonymitet varför behöver den I2P?</a></p>
<p><a href="#WithoutRoutes">Hur anonym/säker är I2P-Bote utan mail-rutter?</a></p>
<p><a href="#OpenSource">Är I2P-Bote open source?</a></p>
<p><a href="#Credits">Vem har skapat I2P-Bote?</a></p>
<p><a href="#Languages">Vilka språk finns tillgängliga?</a></p>
<p><a href="#Translate">Hur kan jag hjälpa till med översättningen av I2P-Bote till mitt språk?</a></p>
<p><a href="#Technical">Hur fungerar det på en teknisk nivå?</a></p>
<p><a href="#GetInvolved">Finns det andra sätt att hjälpa till?</a></p>
</nav><h3 id="What">Vad är I2P-Bote?</h3>
<p>Ett peer-to-peer email-program konstruerat för att skydda din integritet.</p>
<p>I2P-Bote är ett email-system som är krypterat från början till slut, inkapslat och helt
decentraliserat (serverlöst). Det stödjer olika identiter och döljer email-headers.
Det kan når via webkonsoll och det har IMAP och SMTP-stöd så Bote-mail
kan hanteras av vanliga mailprogram. Det kommer senare att stödja ytterligare anonymisering
genom tillval av transport med hög latens. Alla Bote-mail krypteras hela vägen så man behöver
inte kryptera meddelandet själv (även om den möjligheten finns kvar), och Bote-mail
autentiseras automatiskt. Eftersom Bote är decentraliserat finns det ingen emailserver
som kan koppla samman identiteter via mail (profiling). Inte ens noderna
som fungerar som relä för trafiken kommer att känna till vem som är avsändare och
förutom sändare och mottagare kommer endast slutpunkten på mail-tunneln med hög latens
och lagringsnoderna att känna till vem som är (den anonyma) adressaten.
Den ursprungliga avsändaren kan vara offline långt innan mailet blir
tillgängligt på den andra sidan. Detta ökar anonymitetsgraden när man
använder I2P-Bote. För dom som inte vill ha långa fördröjningar kan allt
detta ändras av användaren. Var och en bestämmer själv hur mycket anonymitet som behövs. </p>
<h3 id="Name">Varför heter det I2P-Bote?</h3>
<p>Bote betyder budbärare på tyska.</p>
<h3 id="Why">Varför I2P-Bote?</h3>
<p>För att det är cool och för att I2P saknade en decentraliserad email. Skapandet av
en sådan för att förbättra integreteten ledde också till höglatenstransprt som tillval. Vanliga email
som krypteras är ändå inte anonyma och mail över anonyma mailservrar är inte automatiskt krypterade.</p>
<p>Alternativet är att använda I2P-Bote där alla mail är anonyma och <em>automatiskt</em> krypterade från början till slut.</p>
<p>I motsats till vanliga email-system finns det inget behov av att sätta upp en extra applikation för att handera nycklar. Allting du behöver är redan på plats.</p>
<p>Men trots att det är enkelt att använda erbjuder I2P-Bote kryptering på professionell nivå och alternativ för extremt stark anonymitet.&gt;</p>
<h3 id="Sending">Vad händer med ett email after att jag klickat på 'Skicka'?</h3>
<p>Det krypteras och lagras på andra I2P-Boteanvändares datorer. Därifrån levereras det till mottagaren när hen kollar sin mail.</p>
<h3 id="RandomPeople">Vänta nu, alla mail jag skickar lagras på datorn hos vem som helst? Det låter som en mycket dålig idé!</h3>
<p>Det enda dom ser är skräpdata eftersom det är krypterat med "mycket stark" kryptering. Endast du och mottagaren vet vad som finns i mailet.
Om du dessutom skicka mailet med relän påslagna är det inte ens möjligt att se vem som skickat det.</p>
<p>I valet mellan detta och att använda ett email-konto hos ett
<a href="http://www.theregister.co.uk/2009/12/07/schmidt_on_privacy/">företag som inte respekterar din integritet</a>, och en internetlina
<a href="http://www.eff.org/issues/nsa-spying">som avlyssnas av skumma myndigheter</a>, vilket är mest trovärdigt?</p>
<h3 id="HowItWorks">Hur fungerar det egentligen?</h3>
<p>See <a href="userGuide.jsp#Technical-Concept">'Technical Concept'</a>
section of the <a href="userGuide.jsp">User Manual</a>.</p>
<p>I korthet: I2P-Botes noder bildar ett P2P-nätverk som reläar mailpaket för varandra och lagrar dem i en DHT.</p>
<h3 id="NothingToHide">Varför skall jag använda det? Jag har ingenting att dölja.</h3>
<p>Går du ut på stan utan kläder?</p>
<p>Nå, det kanske du gör, men poängen är att ibland vill att vår privata kommunikation skall vara just privat och ospårbar, och vi vill inte annonsera vad vi säger till vem.</p>
<p>Ibland vill vi bara kommunicera helt anonymt med andra.</p>
<p>Därför är I2P-Bote ett idealiskt verktyg som ger dig ett mycket starkt skydd samtidigt som det bevarar flexibiliteten.</p>
<p>Det syftar till att ge mycket hög profesionell säkerhet och n00b-säker användbarhet: du kan ha riktigt paranoida inställningar där det tar en evighet för ett mail att komma fram; eller snabbare kommunikation och ändå väldigt stark anonymitet.</p>
<p>Du bestämmer - enkelt med ett musklick.</p>
<h3 id="GPG">Hur är det med <a href="http://www.pgp.com/">PGP</a> och
<a href="http://gnupg.org/">GPG</a>?</h3>
<p>PGP och GPG låter dig kryptera dina mail och skicka dem genom ditt vanliga emailkonto. De erbjuder stark kryptering, men de kryptererar bara emailtexten, inte headers så ämnesraden, datornamn och annan information inte är säker.</p>
<p>En annan säkerhetsaspekt är att PGP/GPG inte hindrar någon från att se vem som kommunicerar med vem.</p>
<p>I2P-Bote, i motsats, krypterar allting utom mottagrens destination. (I själva verket är till och med denna endast synlig för noder som inte vet vem avsändaren var.) Det har också förmåga att skicka ett email genom flera reläer (ungefär som <a href="http://mixmaster.sourceforge.net/">Mixmaster</a>), så att ingen kan räkna ut vem som skickar mail till vem.</p>
<h3 id="UsingGPG">Kan jag fortsätta använda GPG/PGP med I2P-Bote?</h3>
<p>Naturligtvis. Antingen kan du GPG-kryptera dina email innan du kopierar in det i I2P-Botes textfält, eller använda mail-app med GPG-stöd.</p>
<h3 id="Susimail">Hur skiljer det sig från Susimail?</h3>
<p>I2P-Bote är bättre eftersom det har högre versionsnummer. Nä, bara på skoj.</p>
<p>I2P-Bote erbjuder högre integritet, men Susimail har några egenskaper som I2P-Bote inte har ännu (se nedan), och Susimail är mer bandbreddseffektivt eftersom det inte lagrar stora mail redundant.</p>
<h3 id="Comparison">Varför är I2P-Bote bättre?</h3>
<p><em>Vi</em> tycker det är bättre för <em>oss</em> (och kanske för dig också), än:</p>
<ul>
<li><p>Mixminion eftersom det är enkelt att använda och så n00b-säkert som vi kunda få det.</p></li>
<li><p>anonyma email-tjänster som inte baseras på destination key-routing, eftersom dessa inte levererar inbyggd kryptering från början till slut.</p></li>
<li><p>centraliserade tjänster, eftersom servern kan gå ner (p.g.a attacker, legala problem, brist på medel, &hellip;)
och admin har för många sätt att ägna sig åt profiling.</p></li>
</ul>
<h3 id="Safeguards">Hur hålls min identitet säker när jag kommunicerar med andra?</h3>
<p>Din IP-adress och din I2P-destination är aldrig inkluderade något mail du skickar.</p>
<p>Counter timing attacks mot transporter med hög latens.</p>
<p> Kryptering från början till slut, kryptering per hopp, paketrelä för andra noder, enhetlig paketstorlek* (padding), konstant sändhastighet (test och dummy meddelanden)*, och ett ganska balanserat in/ut-förhållande motarbetar attacker baserade på trafikanalys.</p>
<p>I2P-Bote är open source vilket garanterar att du själv kan granska koden.</p>
<p>*[inte implementerat ännu]</p>
<h3 id="How">Hur använder jag det?</h3>
<p>Läs <a href="userGuide.jsp">användarguiden</a> och se de andra frågorna och svaren här!</p>
<p>Om du har fler frågor, fråga på forumet:<a href="http://forum.i2p/viewforum.php?f=35">http://forum.i2p/viewforum.php?f=35</a></p>
<h3 id="EmailClients">Kan jag använda ett mailprogram som Thunderbird?</h3>
<p> Ja du kan använda vilket mailprogram du vill så länge det stödjer IMAP och SMTP.</p>
<h3 id="Attachments">Kan jag skicka bilagor och vilka begränsningar finns det?</h3>
<p>Ja, bilagor stöds från och med 0.2.5. Den sammanlagda storleken på bifogade filer bör hållas liten, helst under 500kB.</p>
<h3 id="CreateIdentity">Hur skapar jag ett e-mailkonto?</h3>
<p>I2P-Bote kallar dem Email-Identiteter. Du kan skapa en i I2P-Botes webkonsoll under länken "Identiteter".
Orsaken till att det kallas konto är att det inte finns någon leverantör som GMail elle GMX. Endast du har tillgång till de (kryptografiska) nycklarna till Identiteten.</p>
<p>När du skapar en Identitet genererar I2P-Bote en sträng av siffror och bokstäver som kallas en Destination. Detta är adressen du kan nås på.</p>
<p>Exempel: <code>wsq-8u5bTWbaOsrS0JuXRKL-RsbTkckV4W7u2mIu0Yrlfetixq1F~03CArnvbd6tDWwjPHYEuoKyWqwxplSdix</code></p>
<h3 id="EmailDestination">Vad är en Destination? Hur är det med email-adresser?</h3>
<p>Destinationer (aka bote dests) är mellan 86 och 512 tecken långa beroende på vilken typ av kryptering du använder. Adresser valda av användarna finns i planerna.</p>
<p>Identiteterna består av offentliga och privata nycklar, samt det namn användaren väljer för dem.
Den offentliga delen är din email-destination, din pseudonyma identitet. En användare kan ha fler än en identitet.
De tjänar som adresser för angivna användare - därför kallas de för 'destinationer' eller ' dest' - på samma gång som de
krypterar mailen för dem. Därför är din email-destination nyckeln andra använder för att bekräfta giltigheten och integriteten i mail de tar emot från dig.</p>
<p>Är det säkert att ge sin email-destination till någon man vill ha mail ifrån?</p>
<p>Det är viktigt att skilja mellan mail-destinationen och routerns identitet! Din I2P-Bote mail-identitet är inte kopplad till din I2P-Bote router/node id som används
för att kontakta andra I2P-Bote noder.</p>
<p>Om du har problem med din I2P-Bote - sök hjälp på I2Ps IRC.</p>
<p>??</p>
<h3 id="AddressLength">Varför är email-adresserna så långa?</h3>
<p>I I2P-Bote krypteras varje mail automatiskt. För att du inte skall behöva utväxla både en adress och en lång nyckel har vi helt enkelt gjort nyckeln till adressen.</p>
<p>Det är ofarligt att ge bort den här nyckeln eftersom det är den offentliga nyckeln som alla kan ha utan att riskera integriteten på dina medddelanden.</p>
<p>Om man använder ECC-kryptering kommer man att få kortare destinationer.</p>
<h3 id="AddressBook">Men jag kan inte komma ihåg dom långa destinationerna&hellip;</h3>
<p>Det är skälet till att den integrerade adressboken finns. När du har blivit mer bekant med I2P-Bote kommer du att uppskatta den inbyggda krypteringen och autentiseringen som bara kan uppnås med kryptografiska nycklar.</p>
<p>Återigen, alternativet vore korta och enkla adresser PLUS en lång nyckel för kryptering och autentisering OCH förlita sig på någon auktoritet som förbinder email-adressen med någon anonym mottagare.</p>
<h3 id="MultipleIdentities">Vad är poängen med att använda flera olika mail-identiteter</h3>
<p>I2P-Bote är inte en IM-applikation, så du kan ha många olika identiteter utan att ha många öppna tunnlar.
Det är bara när du hämtar förfrågningar som du använder mer resurser men på samma gång ger du mer anonymitet för andra.</p>
<p>Tänk dig att du kommunicerar med dina vänner utan att någon kan spionera på dig(se: Datalagringsdirektivet) via I2P-Bote, och snabbt behöver skicka ut ett mail att du vill möta dem på ett annat ställe i kväll. Då behöver du super-anonymitet och kan välja bort mail-rutter och fördröjningar. Dina vänner å andra sidan kommer att behöva tätare kontrollintervall få att de får mailet i tid. Du vill fortfarande ha superhög anonymitet för några andra av dina kommunikationer - och det är här olika mail-identiteter med mail-rutter, fördröjningar och lång kontrollintervall kommer väl till handa.</p>
<h3 id="EncryptionTypes">Vilken typ av kryptering är bäst?</h3>
<p>256-bit <a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a>
producerar korta och bekväma destinationer, och det anses starkare än 2048-bit ElGamal.</p>
<p>521-bit <a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a>är starkare än 256-bit ECC, men gör destinationerna längre.</p>
<p>2048-bit <a href="http://en.wikipedia.org/wiki/ElGamal">ElGamal</a>
producerar ännu längre destinationer det är den svagaste av de tre alternativen. Emellertid, ElGamal är bättre granskad än ECC, vilket gör det mindre troligt att det finns en okänd svaghet i IlGamal än i ECC.</p>
<h3 id="Algorithms">Vilka algoritmer används för symmetrisk kryptering och hashing?</h3>
<p><a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES-256</a>
in <a href="http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29">
CBC</a> mode and <a href="http://en.wikipedia.org/wiki/SHA-2">SHA-256</a>.</p>
<h3 id="AntiSpam">Finns det några motåtgärder mot spam?</h3>
<p>I2P-Bote gör ingen aktiv spam-filtrering, men det faktum att massmail emails måste sändas individuellt borde avskräcka spammare.
En annan försvarslinje är <a href="http://www.hashcash.org/">HashCash</a> som stöds på protokollnivå och kan komma att implementeras om spam blir ett problem.</p>
<h3 id="HTML">Hur är det med HTML och formaterad text?</h3>
<p>Webkonsollen återger inte HTML.</p>
<h3 id="Persistence">Hur länge lagras email?</h3>
<p>Email är tillgängliga i 100 dagar efter att de sänts. Mail som inte laddats ner då readeras.</p>
<p>Email som du har hämtat stannar på din lokala dator tills du raderar dem.</p>
<h3 id="DoIdentitiesExpire">När går email-identiteter ut?</h3>
<p>Aldrig.</p>
<h3 id="Gateways">Kan jag skicka och ta emot mail från vanliga email-servrar på internet?</h3>
<p>Nej men det är under arbete.</p>
<!-- Yes. You can both send and receive mails to/from ordinary internet e-mail accounts -->
<h3 id="Postman">Kan jag skicka och ta emot mail från postmans traditionella I2P mail-konton?</h3>
<p>Nej, men detta är också under arbete.</p>
<!-- Yes. You can both send and receive mails to/from some_name@mail.i2p addresses -->
<h3 id="Know">Vad betyder det när Känd är förkryssad i min inbox?</h3>
<p>När avsändarens destination inte är känd lokalt markeras mailet med ett x i kolumnen "Känd" eller genom ett "{UNK}" före avsändarens adress i IMAP.</p>
<p>Det betyder att du inte har något som bevisar att användaren verkligen är den han påstår sig vara med sitt namn. Om signaturen är giltig vet du att han har tillgång till destinationsnyckeln med vilken mailet signerats och att mailets innehåll är från den personen, men du kan inte lita på kort-namnet här. Om du hade fått ett mail från en användare med detta namn tidigare, kan du inte vara säker på att det är samma användare denna gång även om signaturen är giltig. I det här fallet måste du jämföra destinationsnycklarna eller lägga till dem till din adressbok. En användare som inte är känd lokalt är inte nödvändigtvis ond men du bör inte lita på att det är den användare du tror att det är. Men, om den verifieras mot lokalt lagrade nycklar, vet du att det är samma användare när du får ett annat mail från honom och "Känd" har en grön bock.</p>
<h3 id="Terms">Vad betyder "BktPfx", "Distance" och "Locked"?</h3>
<ul>
<li><p>BktPfx = BucketPrefix</p></li>
<li><p>Distance: avståndet till en I2P-Bote nod i nyckelrymden.</p></li>
<li><p>Locked: Om en nod inte är nåbar av någon anledning markeras den som låst samt tiden den varit onåbar.</p></li>
</ul>
<h3 id="Anonymous">Hur kan jag bli mer anonym?</h3>
<ul>
<li><p>Skicka inte någon information om dig själv! (namn, adress, foto, plats, tidzon, ålder, kön, websites, login-namn, I2P router id, I2P-Bote id, Filer som innehåller uppgifter om dig &hellip;)</p></li>
<li><p>skicka ingen personlig information eller information bara du känner till,</p></li>
<li><p>lämna I2P-Bote på 24/7</p></li>
<li><p>använd mailrutter som slumpar per-hopp fördröjningar och/eller per-hopp fasta sänd-tider, [ännu inte implementerat]</p></li>
<li><p>andvänd långa kontrollintervall,</p></li>
<li><p>använd en lång lokal fördröjning för egna paket,</p></li>
<li><p>använd stora slumpade kontroll-intervall. [inte implementerat]</p></li>
<li><p>undertryck sändandet av datum och tid i email-header,</p></li>
<li><p>välj inte översättning av markörer som "Re:" till andra språk,</p></li>
<li><p>var vakam på språk och stil,</p></li>
<li><p>använd olika email-identiteter,</p></li>
<li><p>överväg att kassera email-identiteter efter en längre tids användning,</p></li>
<li><p>&hellip;</p></li>
</ul>
<p>Den här listan är inte avsedd att göra dig paranoid, men att visa på var din anonymitet kan reduceras.</p>
<h3 id="Timestamps">Hur undviker jag att skicka timestamps?</h3>
<p>I inställningarna är det möjligt att välja bort timestamps. Detta har till effekt att ditt mail inte kommer att innehålla datum eller tid för avsändandet.</p>
<!-- <p>(When using mailroutes, the timestamps are automatically disabled.) [not yet implemented]</p> -->
<h3 id="Backups">Hur flyttar jag mina inställningar och data till en annan dator? Hur gör jag en backup?</h3>
<p>I2P-Bote lagrar alla email och all data i mappen <code>i2pbote</code>.
På Windows kan den mappen hittas i
<code>%APPDATA%\I2P\i2pbote</code>; on Linux, it is
<code>$HOME/.i2p/i2pbote</code>.</p>
<p>För att göra backup eller flytta allting, bara kopiera hela <code>i2pbote</code>mappen.</p>
<p>Om du bara är intresserad av email-identiteter, kopiera filen
<code>identities.txt</code>. För adressboken kopiera
<code>addressBook.txt</code>.</p>
<h3 id="MailRoutes">Vad är en <em>mailrutt</em>?</h3>
<p>Se: Vad betyder transport med hög latens?</p>
<!-- <p>(When using mail routes, the timestamps are automatically disabled.) [yet to be implemented]</p> -->
<h3 id="HighLatency">Vad betyder transport med hög latens?</h3>
<p>Det betyder att du kan aktivera en inställning som gör att email-paket inte skickas direkt till lagringsnoderna, utan reläas av andra peerer (som inte kan läsa mailen eftersom de är krypterade med flera lager och rivna i småbitar), vilka inte skickar dem vidare direkt utan väntar en av sändaren angiven tid, vid mottagning specificerad av mottagaren.</p>
<p>Därför tar det lite tid för mailet att komma fram. På så sätt kan en fiende inte helt enkelt köra stats på upptiderna hos en nod (vem var uppkopplad när) och tidpunkterna när ett meddelande togs emot och lagrades (vilket i en låglatensmiljö skulle vara det samma som tiden det sändes), för att avslöja de verkliga personerna bakom I2P-Botes identiteter.</p>
<h3 id="Latencies">Vilka latenser finns det och hur kan de kontrolleras (om alls)?</h3>
<p>I2P-Bote är distribuerat och kör ovanpå nätverket I2P så det tar lite tid. Hastighet är inte vår starka sida, men vi klarar jämförelsen med andra anonyma mailsystem väl. Utan mailrutter aktiverade tar det mellan 3 och 10 minuter från det att du trycker på "Skicka" tills det finns tillgängligt för mottagaren.</p>
<p>Om hastighet är det viktigaste för dig bör du avaktivera mailrutter eller sätta dem till minimivärdet för hopp och per-hopp fördröjning som du kan leva med.</p>
<h3 id="WhyI2P">Om Bote skapar sin egen anonymitet varför behöver den I2P?</h3>
<p>I2P-Bote är byggt ovanpå I2P av huvudakligen 5 skäl:</p>
<ul>
<li><p>I2P saknade en decentraliserad email och HungryHobo är en I2P-användare.</p></li>
<li><p>I2P erbjuder mycket god anonymitet, det är moget och bär på år av erfarenhet.</p></li>
<li><p>Så att bygga ovanpå det reprensenterar en slags fall-back om det skulle finnas några kritiska buggar i I2P-Bote.</p></li>
<li><p>Flexibilitet: Vi vill erbjuda ett enkelt sätt att använda anonym låglatenskommunikation för email som bibehåller en hög nivå av skydd.</p></li>
<li><p>I2P har många andra applikationer som genererar mycket trafik som blandar upp I2P-Botes trafik.</p></li>
<li><p>Till och med Bote-reläer är därför dolda vad gäller plats.</p></li>
</ul>
<h3 id="WithoutRoutes">Hur anonym/säker är I2P-Bote utan mail-rutter?</h3>
<p>Rätt så anonym och mycket säker.</p>
<p>I det fallet har den samma anonymitet som andra applikationer på I2P, d.v.s anonymiteten som I2P-routern ger - vilket redan det är en mycket hög anonymitet. Emellertid, I2P är ett låglatens-nätverk, med alla de tillkortakommanden det innebär. Det finns attacker I2P inte kan skydda dig helt eller delvis emot. I2P-Bote gör sitt bästa för att med sina höglatens-alternativ förstärka och öka den anonymitet I2P erbjuder och vilka gör I2P-Botes mail anonyma på gränsen till paranoida.</p>
<h3 id="OpenSource">Är I2P-Bote open source?</h3>
<p>Naturligtvis!</p>
<blockquote>Denna mjukvara är licensierad under GPL version 3 (se licenses/GPLv3.txt), utom för BouncyCastle som licencieras under Bouncy Castle-licensen (se licenses/BouncyCastle.txt).</blockquote>
<p>(Vilka båda är fria open source bibliotek.)</p>
<p>The source code can be found in the <code>i2p.i2p-bote</code> branch of
<a href="https://geti2p.net/en/get-involved/guides/new-developers#monotone">the I2P Monotone repository</a>.
There is also a <a href="https://github.com/i2p/i2p.i2p-bote">GitHub mirror</a>
which can be used to view the code.</p>
<h3 id="Credits">Vem har skapat I2P-Bote?</h3>
<p>Koncept, teknisk design, implementation och ursprungligt webinterface gjordes av HungryHobo, en anonym utvecklare.</p>
<p>Nuvarande utvecklare av I2P-Bote är str4d.</p>
<p>För feedback eller om du vill hjälpa till, se <a href="http://www.hashcash.org/">HashCash</a> för detaljer.</p>
<h3 id="Languages">Vilka språk finns tillgängliga?</h3>
<p>Engelska, tyska, ryska, franska, spanska, portugisiska, holländska, norska, svenska, kinesiska och arabiska.</p>
<h3 id="Translate">Hur kan jag hjälpa till med översättningen av I2P-Bote till mitt språk?</h3>
<p>Översättningar görs på samma sätt som resten av I2P. Om du vill hjälpa till och har frågor, <a href="about.jsp">kontakta författaren.</a></p>
<h3 id="Technical">Hur fungerar det på en teknisk nivå?</h3>
<p>Ta en titt på filen <code>doc/techdoc.txt</code> i källkoden.</p>
<h3 id="GetInvolved">Finns det andra sätt att hjälpa till?</h3>
<ul>
<li><p>Använd I2P-Bote och ge feedback.</p></li>
<li><p>Berätta för dina vänner, familj, kollegor och andra om I2P-Bote och ge dem en hjälpa hand.</p></li>
<li><p>Nämn I2P-Bote på din blogg, eepsite eller websajt</p></li>
<li><p>Skriv en användar-handbok eller förbättra den tekniska dokumentationen.</p></li>
<li><p>Lägg till nya funktioner.</p></li>
</ul>
</div>

View File

@ -10,10 +10,11 @@
<p><a href="#Settings">2.5. Settings (and what they mean)</a></p>
<p><a href="#Gateway">2.6. E-mails to and from the Internet</a></p>
<p><a href="#Considerations">3. Considerations about Anonymity</a></p>
<p><a href="#Technical-Concept">4. Technical Concept</a></p>
<p><a href="#Technical-Details">5. Technical Details</a></p>
<p><a href="#Terminology">6. Terminology/Glossary of Terms</a></p>
<p><a href="#Credits">7. Credits</a></p>
<p><a href="#Troubleshooting">4. Troubleshooting</a></p>
<p><a href="#Technical-Concept">5. Technical Concept</a></p>
<p><a href="#Technical-Details">6. Technical Details</a></p>
<p><a href="#Terminology">7. Terminology/Glossary of Terms</a></p>
<p><a href="#Credits">8. Credits</a></p>
</nav><h2 id="Introduction">1. Introduction</h2>
<p>I2P-Bote is an easy-to-use, highly anonymous secure e-mail application for
@ -361,7 +362,25 @@ from you. Thusly, if you communicate with those others using the same Bote
address, they will know who you are. Not so, if you used a different address
for sending mails to them.</p>
<h2 id="Technical-Concept">4. Technical Concept</h2>
<h2 id="Troubleshooting">4. Troubleshooting</h2>
<h3 id="Unlimited-Strength-Crypto">4.1. Notification about JCE Unlimited Strength Jurisdiction Policy files</h3>
<p>If you have a notification at the bottom of your screen about JCE Unlimited
Strength Jurisdiction Policy files, it means that your Java installation is
restricted from using the strong cryptography that I2P-Bote requires.</p>
<p>You can enable the strong cryptography by following the steps below:</p>
<ol>
<li><p>Download the JCE Unlimited Strength Jurisdiction Policy files from <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Oracle's website</a>. You may need to use your regular browser.</p></li>
<li><p>Unzip the downloaded zip file.</p></li>
<li><p>Move the files <code>local_policy.jar</code> and <code>US_export_policy.jar</code> into the folder shown in the notification on your screen. Overwrite any existing files with the same names.</p></li>
<li><p>Restart I2P.</p></li>
</ol>
<p>Some countries have restrictions on the allowed strengths of cryptographic
software. If you are unsure about the restrictions in your country, consult
with a lawyer.</p>
<h2 id="Technical-Concept">5. Technical Concept</h2>
<p>I2P-Bote is an end-to-end encrypted, network-internal, fully decentralized
(i.e. serverless) e-mail system. It supports different identities and does not
expose e-mail headers. Currently, it is still alpha software. It can be
@ -479,10 +498,10 @@ he sent a mail.</p></li>
<p>I2P-Bote cannot hide the frequency a given identity checks for new mails nor
the number of mails a given identity receives.</p>
<h2 id="Technical-Details">5. Technical Details</h2>
<h2 id="Technical-Details">6. Technical Details</h2>
<p>See techdoc.txt</p>
<h2 id="Terminology">6. Terminology/Glossary of Terms</h2>
<h2 id="Terminology">7. Terminology/Glossary of Terms</h2>
<h3>I2P-Bote (router/node) id:</h3>
<p>This is the id an I2P-Bote router is known as. It is used for contacting
@ -554,7 +573,7 @@ implemented]</p>
hops and / or long delay times, don't be surprised if your mail does not reach
its destination too soon. It will, of course, take longer - up to several days!</p>
<h2 id="Credits">7. Credits</h2>
<h2 id="Credits">8. Credits</h2>
<p>See <a href="about.jsp">the About page</a>.</p>
<h2>ENJOY THE BOTE FEELING!!</h2>

View File

@ -0,0 +1,562 @@
<div>
<h1>Benutzerhandbuch</h1>
<nav><p><a href="#Introduction">1. Einführung</a></p>
<p><a href="#How-To">2. I2P-Bote anwenden</a></p>
<p><a href="#Starting">2.1. I2P-Bote starten</a></p>
<p><a href="#Creating-Identities">2.2. Erstellen einer Identität</a></p>
<p><a href="#Sending-Receiving">2.3. E-Mails senden und empfangen</a></p>
<p><a href="#Address-Book">2.4. Lokales Adressbuch</a></p>
<p><a href="#Settings">2.5. Einstellungen (und was sie bedeuten)</a></p>
<p><a href="#Gateway">2.6. E-Mail-Gateway ins Internet</a></p>
<p><a href="#Considerations">3. Mögliche Anonymität</a></p>
<p><a href="#Troubleshooting">4. Problemlösung</a></p>
<p><a href="#Technical-Concept">5. Technisches Konzept</a></p>
<p><a href="#Technical-Details">6. Technische Details</a></p>
<p><a href="#Terminology">7. Terminologie/Übersicht der Themen</a></p>
<p><a href="#Credits">8. Dank an</a></p>
</nav><h2 id="Introduction">1. Einführung</h2>
<p>I2P-Bote ist eine einfach zu verwendende, hoch-anonyme, sichere, E-Mail-Anwendung für I2P. Sie ist ein voll dezentralisiertes System, welches ein
Peer-to-Peer-Netzwerk formt / erstellt und unabhängig von Servern ist.
Sie basiert auf der aktuellsten Version des Anonymisierungsnetzwerk I2P
mit niedriger Latenz bei letzten Wissensstand. I2P fügt dabei optional ein
Mixminion-ähnlichen Netzwerklayer mit hoher Latenz hinzu und das bei
gleichzeitiger Vermeidung der Nachteile eines Niedrig-Latenz-Netzwerkes. </p>
<p>Daher profitiert I2P-Bote von der Anonymität, die durch I2P bereitgestellt
wird und es generiert seine eigene Anonymität durch Hinzufügen einer
weiteren Netzwerkschicht (overlay network).</p>
<p>Dieses Konzept der geschichteten Anonymität ist, was I2P-Bote so flexibel
macht: es kann so konfiguriert werden, dass es extrem anonym und langsam
ist, oder weniger anonym, aber schneller und effizienter. Auf jeden Fall stellt
I2P-Bote für beide, den Sender und Empfägner immer ein hohes Mass an
Anonymität so wie Ende-Zu-Ende-Verschlüsselung bereit. Falls nicht
vorgesehen ist, E-Mails vom regulären Internet zu senden oder zu
emfpangen, dann werden von ALLEN E-Mails - dem Körper, Anhänge und
der Kopf (Betreff, Datum, Zeit, Senderadresse, [&hellip; ?]), ausser der
Empfängeradresse automatisch und transparent Ende-zu-Ende-Verschlüsselt.
Die Empfängeradresse ist nur für den letzten Node der Mail-Route sichtbar,
der die Pakete in das KAD-Netzwerk speichert und für die entsprechenden
peichernden Nodes, aber sie können den Inhalt der Mail nicht lesen, noch
wer sie sandte oder empfängt. </p>
<p>I2P-Bote bietet die Option, Ihre Kommunikation sogar noch sicherer zu machen,
und zwar durch die Einstellung der Mail-Routen mit hoher Latenz, dies jedoch zu
Lasten der Performance. Anwender, deren Ziel es ist, dass Ihre Mails so schnell wie
möglich ankommen, können die Mail Routen abschalten und verwenden das 'direkte'
Senden über I2P. Es ist garantiert, dass Sie niemals weniger anonym sind, als es über
die Standard I2P Verbindungen gegeben ist.
</p>
<p>Um ein hohes Mass an Alltagstautlichkeit zu gewährleisten, haben wir die Möglichkeit des Einsatzes von Email-Clients wie Thunderbird, Evolution oder Kmail geschaffen, so dass man sich keine Gedanken darüber machen müss, welche zusätzlichen Informationen diese Programme in Ihren Kopfzeilen versenden. Darüber hinaus gibt es ein Web Interface, welches es ermöglicht, Ihre eigenen Einstellungen und Identitäten zu verwalten. </p>
<h2 id="How-To">2. I2P-Bote benutzen</h2>
<h3 id="Starting">2.1. I2P-Bote starten</h3>
<p>Nach dem Start von I2P-Bote (Standard ist Start nach jedem Hochfahren
des I2P-Routers) dauert es knapp über drei Minuten, bis alles läuft. </p>
<p>Also siehe 'Netzwerkstatus' auf der linken Seite. Er sollte 'Connected'
anzeigen. </p>
<p>Um I2P-Bote zu verwenden, muss zunächst eine neue Identität
erstellt werden.</p>
<h3 id="Creating-Identities">2.2. Erstellen einer Identität</h3>
<p>Clicke auf 'Identitäten' auf der linken Seite, dann drücke den Button
'Neue Identität'</p>
<p>Geben Sie mindestens einen 'öffentlichen Name' ein und drücken Sie 'Erstellen'. Das ist alles, was es braucht, um eine Identität zu erstellen. </p>
<p>Der öffentliche Name ist der Name, den Sie für diese Identität sehen. Dies
ist nützlich wenn Sie über unterschiedliche Identitäten verfügen um mit
unterschiedlichen Benutzern zu kommunizieren oder aufgrund anderer Ziele.
Er wird als Sendername an den Email-Empfänger gesendet. Es besteht dabei
keine Notwendigkeit, Unverwechselbarkeit. </p>
<p>(Da Sie hier jeden Namen wählen können - kann jeder sich HungryHobo
nennen) - es ist für den Empfänger nicht geeignet, um festzustellen, ob
zwei Mails vom gleichen Abstender stammen. Aus diesem Grund wird
der Name im lokalen Adressbuch gespeichert (es gibt nur genau einen
Name je Zeiladresse), der, sofern gegeben, angezeigt wird. In der
"Bekannt"-Zeile erscheint eine grüne Markierung, die aufzeigt, dass es sich
sich um den lokal bekannten Name handelt. Wenn im lokalen Adressbuch
keine Ziel-Adresse gespeichert ist, dann wird der vom Sender spezifizierte
Name mit einem Präfix im Mail Client angezeigt.
</p>
<p>Falls gewünscht, können jetzt die anderen Felder ausgefüllt werden. </p>
<p>'Beschreibung' - dieses Feld ist lokal und zur Verfügung des Anwenders.
Wenn zusätzliche Information zu dieser Identität hinzugefügt werden,
soll, dann kann dies hier erfolgen. </p>
<p>Email-Adresse - dieses Feld wird noch nicht verwendet.</p>
<p>Wähle eine der gegebenen Verschlüsselungs-Algorithmen. Im Zweifel,
kann der Standard belassen werden. </p>
<p>Sie können auf den Name einer Ihre Identitäten klicken und den langen
Schlüssel kopieren, der unter 'Email-Zieladresse' angezeigt ist. Dies ist
Ihre I2P-Bote E-Mail-Adresse. Wenn Sie es jemand ermöglichen wollen,
Ihnen eine Email zu schreiben, dann müssen Sie ihm diesen langen
Schlüssel geben. </p>
<p>Sie können nun I2P-Bote-Mails senden und empfangen.</p>
<p>Aber es sollte ein Blick auf die I2P-Bote-Einstellungen geworfen werden, um zu sehen, ob Sie Ihren Ansprüchen entsprechen. </p>
<p>(Sie können ebenfalls unterschiedliche Identitäten erstellen und jeder
dieser individuelle Einstellungen zordnen.)</p>
<h3 id="Sending-Receiving">2.3. E-Mails senden und empfangen</h3>
<p>Sie müssen die I2P-Bote E-Mail-Ziel-Adresse des Nutzers haben, dem
Sie eine Mail zusenden wollen. </p>
<p>Um eine Nachricht zu senden clicken sie auf 'Neu', wählen Sie im Feld
'Von' Ihre eigene Sender-Identität oder 'Anonym'; geben Sie dann im Feld
'Von' die E-Mail-Zieladresse in das Empfängerfeld oder alternativ eine
Adresse ein. </p>
<p>(Alternativ können Sie den 'Adressbuch'-Button unmittelbar unter der
Linie klicken um von Email-Destinationen auszusuchen, die lokal in Ihrem
Adressbuch gespeichert sind. Markieren Sie dein / die Benutzer, an den
Sie Ihre Mail senden wollen und drücken Sie den 'Empfänger
hinzufügen'-Button.)</p>
<p>Sie können mehrfache Empfänger hinzufügen und 'An' ändern in 'CC' oder 'BCC'.</p>
<p>Die Schaltfläche '+' fügt zusätzliche Empfängerzeilen hinzu.</p>
<p>Schreiben Sie jetzt Ihre Bote Mail und drücken Sie 'Senden' zum senden
oder 'Speichern',um sie als Entwurf in Ihrem 'Entwürfe'-Ordner oder
einem anderen Ordner [noch nicht implementiert] zu speichern.</p>
<p>Klick auf 'Senden' placiert Ihre Email im Outbox-Ordner und Sie können
I2p-Bote weiter verwenden, z.B. um eine weitere EMail zu schreiben oder
andere Dinge zu tun; I2P-Bote sendet Ihre Email nun. Wenn gesendet, dann
wird die Nachricht automatisch in Outbox entfernt und im Ordner Gesendet
eingestellt. Dies bedeutet, Ihre Email ist absolut auf dem Weg zu Ihrem Ziel
(eventuell verzögert durch eine Delay-Time, die aber als Standard-Einstellung
nicht gesetzt ist)</p>
<p>I2P-Bote-Emails sind automatisch unterschrieben, es sei denn Sie senden
ohne Absenderidentität. </p>
<p>You can also send e-mails without specifying <em>any</em> sender
identity/destination/address, just select 'Anonymous' in the scroll-down
menu 'From:'.</p>
<p>In der Standardeinstellung wird I2P-Bote automatisch neue Nachrichten abfragen und alles was Sie machen müssen um zu sehen, ob Nachrichten eingegangen sind, ist in Ihrer Inbox nachzusehen (Link 'Inbox' links).</p>
<p>Sie können manuell prüfen, ob Emails vorhanden sind, indem Sie auf den 'Check Mail' Button klicken. Dies ist eine globale Prüfung auf Emails für alle Ihre Identitäten, ausser denen, die Sie für diese Funktion ausgeschlossen haben [letztere Funktion ist noch nicht implementiert].</p>
<p>Die Anzahl der ungelesenen Emails wird in Klammern neben dem Ordnername in der Seitenleiste angezeigt. </p>
<p>Clicken Sie auf 'Inbox', um die Liste der eingegangenen Emails angezeigt zu bekommen. Sie sehen zwei Spalten mit x'en oder gründen Haken. Letztere zeigen Ihnen ob eine Email eine gültige Signatur enthält und ob sich authentisch ist und ob die Email-Destinatination des Senders lokal bekannt ist (Signatur), üblicherweise in Ihrem Adressbuch enthalten ist. Darüber hinaus bedeuten zwei grüne Haken neben Ihrer Email-Eingabe, dass die Email über eine gültige Signatur verfügt und dass diese Signatur lokal bekannt ist. </p>
<p>Wenn Sie einen bestimmten Name in Ihrem Adress-Buch haben und Sie eine Mail von dieser Identität erhalten, in dem Wissen, dass der grüne Haken nicht angezeigt wird, dann ist es eine andere Adresse, die die Mails gesendet und signiert hat; der Absender hat dann einfach nur den gleichen Name gewählt, den Sie Ihren Kontakten zugewiesen haben.&nbsp;</p>
<p>Wenn ein grüner Haken für 'Sig' angezeigt wird, dann wurde die Mail korrekt für den Sender signiert und Sie können den Absender Ihrem Adressbuch unter einem neuen Name hinzfügen; dieser wird ab sofort als der Sender angezeigt.&nbsp; &lt;br&gt;</p>
<p>Natürlich hat eine Mail ohne Sender-Angabe ('Anonym' ist als Sender angezeigt) hat zwei x'e.</p>
<p>Clicken einer der in Ihrer Inbox angezeiten Emails öffnet die Mail.</p>
<p>Das gleiche gilt für andere Ordner. </p>
<p>(Aufgrund der verteilten Natur von I2P-Bote dauert es eine Zeit um auf Emails zu prüfen oder sie herungerzuladen; bei aktivierten Mail-Routen noch länger. Es ist nicht erforderlich den Browser offen zu lassen, lassen Sie I2P-Bote einfach als Hintergrundprozess laufen - dieses unterstützt auch Ihre Anonymität. ) &lt;br&gt;</p>
<h3 id="Address-Book">2.4. Lokales Adressbuch</h3>
<p>Wenn Sie den I2P-Bote-Email-Schlüssel von jemandem erhalten haben, dem Sie öfters schreiben wollen, dann geht es gut von der Hand, diesen Schlüssel in Ihr lokales Adress-Buch aufzunehmen (Link auf der linken Seite), und zwar unter einem Name Ihrer eigenen Wahl für diesen Kontakt. Fügen Sie die betreffende Email-Zeil-Adresse in die entsprechenden Zeilen ein, dann speichern. &lt;br&gt;</p>
<p>You should normally save destinations to your address book, so that next time
you get a mail from the same sender it will be shown to be from the same,
locally known sender ('Loc' is checked) and a mail sent by someone else who
is just using the same user name will be marked as NOT known locally (an x in
web-UI's 'Know' column or {UNK} before the sender address in IMAP), so you know
it's a new/different one.</p>
<h3 id="Settings">2.5. Einstellungen (und was sie bedeuten)</h3>
<p>Under settings you can choose the I2P-Bote interface's <em>language</em>
(currently English or German) and decide whether even with a non-English
language setting everything that will be automatically added to an e-mail when
replying will nonetheless stay in English, so that the recipient does not know
your I2P-Bote is set to a different language. Otherwise the recipient could
guess about your nationality which would decrease your anonymity.</p>
<p>Here you can also adjust the interval for <em>automatic checking</em> of
e-mails and decide whether or not to send any <em>time stamp</em> with your
mails, indicating date and time when the mail was sent. The time stamps are
always in UTC.</p>
<p>(When using mail routes, the timestamps are automatically disabled.) [not
yet implemented]</p>
<p>automatischer Abruf von E-Mails:</p>
<p>For more comfort there is the 'Check for mail every XX minutes'
option.</p>
<p>Here you can specify how often your I2P-Bote app should try to fetch unread
mails for your identities. This can be set on a per-identity basis [not yet
implemented]</p>
<p>If you specify a random offset, then it will not check _exactly_ every XX
minutes, but rather every (XX+-offset*XX) minutes, i.e. after a randomly chosen
time between (1-offset)XX minutes and (1+offset)XX minutes. [not yet
implemented]</p>
<p>You can also totally disable the automatic checking for a given
identity.</p>
<p>(If you are not sure about these settings, the defaults should be ok for
you.)</p>
<p><em>Mail routes</em> are chains of I2P-Bote nodes acting as relays/routers for
other peers and obeying to per-hop delays, thus providing the high-latency
transport for increased anonymity.</p>
<p>You can specify the number of nodes (here called hops) that should be
chained to form a mail route. Then each of the e-mail packets sent by the
identity that has mail routes enabled will go through a mail route of n hops
before being stored. You can set a delay for each hop individually, as no hop
should know the time a packet will wait at the next hop, making the timing
unpredictable. [individual per-hop and per-identity setting of delays not yet
implemented]</p>
<p>As delay you can specify a time frame (e.g. 60-600 minutes) - then a
random wait time between the two values will be chosen for the packet at that
hop - or a fix time, then the packet will be forwarded at that fix time, e.
g. noon UTC, no matter when it arrived. [fix time not yet implemented]</p>
<p>(When using mail routes, the timestamps are automatically disabled.) [not yet
implemented]</p>
<p>Under <em>Mixing anonymity</em> (minimum threshold number of relay
packets that will be sent) you can specify a threshold. As your node can only
act reliably as a mix if there are enough foreign packets to mix and to blend
own packets with, it will accumulate messages whose delay time is over until
reaching this lower limit. Only when it is surpassed, your node starts sending
them out in random order. [Not yet implemented]</p>
<p><em>exclude identity from global checking</em> [Not yet implemented]</p>
<p>If you enable this option for one of your identities, then this one will not
be affected by the global manual checking for mails nor by any global automatic
mail checking.</p>
<h3 id="Gateway">2.6. E-Mail-Gateway ins Internet</h3>
<p>[NOCH NICHT VOLLSTÄNDIG IMPLEMENTIERT!]</p>
<p>In order to be able to send bote mails to the internet and to receive
e-mails from the internet with your I2P-Bote application, you must first
register with an appropriate mail gateway. Currently there is only one:
postman.</p>
<ol>
<li><p>First, go to
<a href="http://hq.postman.i2p/?page_id=16">http://hq.postman.i2p/?page_id=16</a>
and register an account. If you already have an account or if you have just
created one as described, proceed with #2.</p></li>
<li><p>For an existing account you can add your I2P-Bote mail destination, so
that e-mails coming from the internet are forwarded to your I2P-Bote app. To do
so go to
<a href="http://hq.postman.i2p/?page_id=74">http://hq.postman.i2p/?page_id=74</a>
and provide the requested information.</p></li>
</ol>
<p>Now all e-mails sent to that address
(<a href="mailto:name@i2pmail.org">name@i2pmail.org</a> from the outer internet
or <a href="mailto:name@mail.i2p">name@mail.i2p</a> for mails from other postman
subscribers) will be forwarded via the I2P-Bote network to your I2P-Bote
app.</p>
<p>(N.B. When using the <a href="mailto:name@mail.i2p">name@mail.i2p</a> or
<a href="mailto:name@i2pmail.org">name@i2pmail.org</a> addresses instead of the
long addresses, e-mails are no longer end-to-end encrypted. Therefore, it is
recommended to exchange the I2P-Bote mail destination keys for communicating
within the network. Postman has offered high quality services in I2P for quite
a while already, but be aware that it's a centralized point that might go
offline one day, or worse be taken over by an evildoer that will manipulate
mails. As for network-internal e-mail communication, I2P-Bote makes sure that
if you use the address keys, nobody can tamper with the mails you send or
receive.)</p>
<p>If you want not only to receive e-mails from the internet, but also enable
sending e-mails from I2P-Bote to the internet, you must provide your I2P-Bote
client with the gateway's mail destination key, so that your I2P-Bote knows
where to send those mails to.</p>
<p>You can do this under 'Settings'. This gateway will allow I2P-Bote users
to communicate with the standard e-mail users on the internet as well as with
users of postman's classical i2pmail service (@mail.i2p).</p>
<p>In order to fight abuse, there will be a limitation of the number of e-mails
you can send out to the internet; just like for normal postman mail service
users: If an I2P-Bote user exceeds the quota with outgoing e-mails, the
additional e-mails will be sent back as bounce.</p>
<h2 id="Considerations">3. Überlegungen über Anonymität</h2>
<p>Don't send identifying information about you (name, address, geographic
location, time zone, age, websites you have just visited or blogged about, user
names, ip numbers, I2P router id, I2P-Bote id, social security number, credit
card number, &hellip;, copies of your passport, driver's license, home rental
contract, photos (nude or with clothes), documents that contain your
username in author's settings, and many many more)!</p>
<p>Wenn möglich,</p>
<ul>
<li><p>lassen Sie I2P-Bote 24/7 laufen,</p></li>
<li><p>use mailroutes with randomized per-hop delays and/or per-hop fixed send
times, [not yet <em>fully</em> implemented]</p></li>
<li><p>verwenden Sie ein langes Abrufintervall,</p></li>
<li><p>verwenden Sie eine lange lokale Verzögerung für eigene Pakete,</p></li>
<li><p>verwende große Intervalle nach zufälligem Muster [noch nicht
implementiert]</p></li>
</ul>
<p>You can suppress the sending of date and time in the e-mails' header.</p>
<p>When you reply to an e-mail, certain markers are added to show the recipient
that this is a reply, such as 'Re: [subject of the mail you're replying to]' or
'[username] wrote:'. Those are different for the languages you can chose from in
your language settings. However, if you don't want the recipient to know what
language you have set, you can suppress translation of these markers, so that
they will be in English, no matter what you language setting is. In order to do
so, mark 'Use English for text added to outgoing email ('Re:', 'wrote:',
etc.)'</p>
<p>Be careful with the contents you send! Don't include personal information or
information that only you can possess. Don't write 'I'm going to bed now, it's
late' when including time stamps.</p>
<p>The language in which you write your e-mails, your style and formulations
can also be of interest for an attacker.</p>
<p>I2P-Bote also offers the possibility to use different e-mail identities.
Suppose one of you contacts learns about your identity, as you forgot to erase
identifying information in a secret document you have sent to him. Now if this
e-mail's recipient was to collaborate with others you are in contact with, he
could tell them the real world identity belonging to the Bote address he knows
from you. Thusly, if you communicate with those others using the same Bote
address, they will know who you are. Not so, if you used a different address
for sending mails to them.</p>
<h2 id="Troubleshooting">4. Problemlösung</h2>
<h3 id="Unlimited-Strength-Crypto">4.1. Notification about JCE Unlimited Strength Jurisdiction Policy files</h3>
<p>If you have a notification at the bottom of your screen about JCE Unlimited
Strength Jurisdiction Policy files, it means that your Java installation is
restricted from using the strong cryptography that I2P-Bote requires.</p>
<p>You can enable the strong cryptography by following the steps below:</p>
<ol>
<li><p>Download the JCE Unlimited Strength Jurisdiction Policy files from <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Oracle's website</a>. You may need to use your regular browser.</p></li>
<li><p>Packen Sie die heruntergeladene ZIP-Datei aus.</p></li>
<li><p>Move the files <code>local_policy.jar</code> and <code>US_export_policy.jar</code> into the folder shown in the notification on your screen. Overwrite any existing files with the same names.</p></li>
<li><p>I2P neu starten.</p></li>
</ol>
<p>Some countries have restrictions on the allowed strengths of cryptographic
software. If you are unsure about the restrictions in your country, consult
with a lawyer.</p>
<h2 id="Technical-Concept">5. Technisches Konzept</h2>
<p>I2P-Bote is an end-to-end encrypted, network-internal, fully decentralized
(i.e. serverless) e-mail system. It supports different identities and does not
expose e-mail headers. Currently, it is still alpha software. It can be
accessed via web console, and it has IMAP and SMTP support, so bote-mails can
be read and written by regular email clients. It is planned to guarantee
additional anonymity by providing a high-latency transport option. All
bote-mails are automatically end-to-end encrypted, so that there's no need to
set up extra e-mail encryption (though you can do that), and bote-mails will be
authenticated automatically. As it is decentralized, there is no e-mail server
that could link different e-mail identities as communicating with each other
(<em>profiling</em>): Even the nodes relaying the mails will not know the sender
and apart from sender and receiver, only the end of the high-latency mail
tunnel and the storing nodes will know to whom (anonymous identity) the mail is
destined. The original sender can have gone offline long before the mail
becomes available on the other side. This adds on the degree of anonymity that
can be reached with I2P-Bote. For those who do not want high delays: All these
settings are user-adjustable, so each user decides on how much anonymity he
wants.</p>
<p>I2P-Bote nodes store encrypted e-mails into a Kademlia DHT. Therefore, an
e-mail can be sent through a number of other nodes (relays) for increased
security, or directly to a set of storage nodes for faster delivery. The same
applies to retrieving email.</p>
<p>(When using mail routes, timestamps are automatically disabled.) [Retrieving
via relays not yet implemented]</p>
<p>All nodes are created equal: There are no 'supernodes' or designated
relay/storage nodes. Everybody acts as a potential relay and storage node. The
maximum amount of disk space used for relayed/stored email packets can be
configured by the user.</p>
<p>Before an email is sent to a relay, it is broken up into packets and
encrypted with the recipient's public key. These packets are stored redundantly
in a distributed hash table (DHT).</p>
<p>They are kept for at least 100 days, during which the recipient can download
them.</p>
<p>Relay packets also expire after 100 days or more.</p>
<p>If a node runs out of email storage space, and there are no old packets that
can be deleted, the node refuses storage requests.</p>
<p>Furthermore, I2P-Bote sanitizes the mail headers and does not allow any
unneeded information to be transmitted, thus allowing the use of e-mail clients
without prior checks of what this client sends in the mail headers.</p>
<p>All the encryption, path choosing and profiling is done locally so that
there is no trusted party involved.</p>
<p>Not even for bootstrapping I2P-Bote depends on a central node, as it uses
Seedless.</p>
<p>Using I2P-Bote appropriately, that means keeping in mind the considerations
given above and showing some common sense, nobody will be able to find out who
or where you are. And if you are already being observed and your internet
connection sniffed, the observer will not be able to find out what you send or
receive or to whom you are sending to or receiving from or where your contacts
are located.</p>
<p>Let's go a bit more into detail:</p>
<h3>Was I2P-Bote <em>versteckt</em>:</h3>
<p>I2P-Bote hides both, the identity and location of sender and receiver, as
well as those of intermediary nodes (relays and storing nodes), the content of
your mails, their size, the number of mails you send.</p>
<p>Only the recipient can know the sender's bote mail destination, and if he
choses not to send his destination, not even the recipient will know it.</p>
<p>Even if you send time stamps, your time zone will not be disclosed.</p>
<p>Darüberhinaus verbirgt I2P-Bote:</p>
<ul>
<li><p>the fact that you run I2P-Bote</p></li>
<li><p>the fact that you send a mail</p></li>
<li><p>the fact that you receive a mail</p></li>
<li><p>the time you send a mail</p></li>
<li><p>the time you receive a mail</p></li>
<li>
<p>the upper limit of number of mails an unknown user receives</p>
<ul>
<li><p>an abstract user, no concrete one, just concluding its existence from
the existence of the mail identity as he could always have more than one e-mail
identity</p></li>
</ul>
</li>
<li><p>the lower limit, as an identity also sends out test and dummy messages</p></li>
</ul>
<h3>What I2P-Bote <em>hides partially</em>:</h3>
<p>The I2P-Bote address of the recipient will only be known to sender and
recipient(s).</p>
<p>In case of multiple recipients, each one will see all other recipients that
the mail was addressed to via 'To:' or 'CC:'</p>
<p>All entries that were under 'BCC:' will only be visible to the sender and
this very recipient.</p>
<p>The sent time will, if at all, only be visible to sender and
recipient.</p>
<h3>What I2P-Bote <em>can hide optionally</em>:</h3>
<ul>
<li><p>If mail routes are used, the time a bote mail is sent</p></li>
<li><p>If mail routes are used, the time a bote mail is fetched. [not yet
implemented]</p></li>
<li><p>If the sender suppresses timestamps only the sender himself will know when
he sent a mail.</p></li>
</ul>
<h3>Was I2P-Bote <em>nicht verstecken kann</em>:</h3>
<p>I2P-Bote cannot hide the frequency a given identity checks for new mails nor
the number of mails a given identity receives.</p>
<h2 id="Technical-Details">6. Technische Details</h2>
<p>Siehe techdoc.txt</p>
<h2 id="Terminology">7. Terminology/Glossary of Terms</h2>
<h3>I2P-Bote (Router-/Knoten-)Kennung:</h3>
<p>This is the id an I2P-Bote router is known as. It is used for contacting
this router, for storing, relaying and fetching mails, but also used in the
hop-to-hop encryption and for simply contacting it via I2P, as it is at the
same the I2P-Bote router's I2P tunnel destination. It is displayed to represent
an I2P-Bote node in the stats.</p>
<p>So the router id corresponds to the I2P destination (the address of an
I2P-Bote node on the I2P network - there is no need to know it unless you are
having problems connecting to other I2P-Bote nodes).</p>
<h3>I2P-Bote E-Mail-Ziel:</h3>
<p>The I2P-Bote e-mail destination (key) is an identifier by which somebody can
be reached via I2P-Bote, so as the name states: an e-mail destination. Thus it
is for I2P-Bote what an e-mail address is for standard e-mail system: The
e-mail destination is the actual address for sending e-mails, for storing them
into and for fetching them from the DHT. At the same time it used for the
end-to-end encryption of e-mails, header information and attachments.</p>
<p>An I2P-Bote e-mail destination is a Base64 string containing a public
encryption key and a signature verification key. Example:</p>
<pre>uQtdwFHqbWHGyxZN8wChjWbCcgWrKuoBRNoziEpE8XDt8koHdJiskYXeUyq7JmpG
In8WKXY5LNue~62IXeZ-ppUYDdqi5V~9BZrcbpvgb5tjuu3ZRtHq9Vn6T9hOO1fa
FYZbK-FqHRiKm~lewFjSmfbBf1e6Fb~FLwQqUBTMtKYrRdO1d3xVIm2XXK83k1Da
-nufGASLaHJfsEkwMMDngg8uqRQmoj0THJb6vRfXzRw4qR5a0nj6dodeBfl2NgL9
HfOLInwrD67haJqjFJ8r~vVyOxRDJYFE8~f9b7k3N0YeyUK4RJSoiPXtTBLQ2RFQ
gOaKg4CuKHE0KCigBRU-Fhhc4weUzyU-g~rbTc2SWPlfvZ6n0voSvhvkZI9V52X3
SptDXk3fAEcwnC7lZzza6RNHurSMDMyOTmppAVz6BD8PB4o4RuWq7MQcnF9znElp
HX3Q10QdV3omVZJDNPxo-Wf~CpEd88C9ga4pS~QGIHSWtMPLFazeGeSHCnPzIRYD</pre>
<p>I2P-Bote router/node id and I2P-Bote e-mail destinations look similar, but
are completely independent of each other.</p>
<h3>E-Mail-Adresse:</h3>
<p>E-Mail-Adressen in I2P-Bote sind Verknüpfungen für E-Mail-Ziele.</p>
<p>The e-mail address &lt;--&gt; e-mail destination mappings are stored in two
places: the local address book and the distributed address directory [the
latter not yet implemented].</p>
<h3>I2P-Bote E-Mail-Identität:</h3>
<p>The I2P-Bote e-mail identity is a set of an I2P-Bote e-mail destination key,
the corresponding private keys and a name given to it by the user. This name
will be sent with the destination key if you do not suppress sending
information about the sender.</p>
<p>However it will only be displayed for the recipient in case he does not have
a name for this destination in his local address book.</p>
<p>So technically speaking, an e-mail identity consists of four things:</p>
<ul>
<li><p>ein E-Mail-Ziel (z.B. zwei öffentliche Schlüssel)</p></li>
<li><p>zwei private Schlüssel für das E-Mail-Ziel</p></li>
<li><p>ein öffentlicher Name, der anderen Leuten in E-Mails gezeigt werden kann</p></li>
<li><p>a description which is not shown to anybody but you (it helps you remember
which e-mail identity you use for which purpose).</p></li>
</ul>
<p>An e-mail identity is not required for sending emails (although then only
'Anonymous' can be selected for the 'sender' field).</p>
<h3>Mailrouten:</h3>
<p>Mail routes are an additional high-latency transport for I2P-Bote. For this,
a chain of I2P-Bote nodes is built, acting as relays/routers for packets and
obeying to individual per-hop delays. [still no individual setting for delays
implemented]</p>
<p><strong>BEWARE!</strong> If you choose this option - especially with many
hops and / or long delay times, don't be surprised if your mail does not reach
its destination too soon. It will, of course, take longer - up to several days!</p>
<h2 id="Credits">8. Credits</h2>
<p>Siehe die Seite <a href="about.jsp">Über</a>.</p>
<h2>GENIESSEN SIE DAS BOTE-GEFÜHL!!</h2>
</div>

View File

@ -10,10 +10,11 @@
<p><a href="#Settings">2.5. Configuraciones (y lo que significan)</a></p>
<p><a href="#Gateway">2.6. Correos electrónicos hacia y desde Internet</a></p>
<p><a href="#Considerations">3. Consideraciones sobre anonimato</a></p>
<p><a href="#Technical-Concept">4. Concepto técnico</a></p>
<p><a href="#Technical-Details">5. Detalles técnicos</a></p>
<p><a href="#Terminology">6. Terminología/Glosario de términos</a></p>
<p><a href="#Credits">7. Reconocimientos</a></p>
<p><a href="#Troubleshooting">4. Resolución de problemas</a></p>
<p><a href="#Technical-Concept">5. Concepto técnico</a></p>
<p><a href="#Technical-Details">6. Detalles técnicos</a></p>
<p><a href="#Terminology">7. Terminología/Glosario de términos</a></p>
<p><a href="#Credits">8. Créditos</a></p>
</nav><h2 id="Introduction">1. Introducción</h2>
<p>I2P-Bote es una aplicación de correo electrónico para I2P segura, altamente
@ -382,7 +383,25 @@ de usted. De ese modo, si usted se comunica con esos otros usando la misma
dirección Bote, sabrán quién es usted. No ocurriría así si usted utilizase una
dirección distinta para enviarles correos.</p>
<h2 id="Technical-Concept">4. Concepto técnico</h2>
<h2 id="Troubleshooting">4. Resolución de problemas</h2>
<h3 id="Unlimited-Strength-Crypto">4.1. Notificación acerca de los ficheros de JCE Unlimited Strength Jurisdiction Policy</h3>
<p>Si tiene una notificación en la parte inferior de su pantalla acerca de los
ficheros JCE Unlimited Strength Jurisdiction Policy, significa que su instalación
de Java tiene restringido el uso de criptografía robusta que I2P-Bote requiere.
</p>
<p>Puede habilitar la criptografía robusta siguiendo los pasos de debajo:</p>
<ol>
<li><p>Descargue los ficheros JCE Unlimited Strength Jurisdiction Policy del <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">sitio web de Oracle</a>. Puede que necesite usar su navegador corriente.</p></li>
<li><p>Descomprimir el fichero zip descargado.</p></li>
<li><p>Mueva los ficheros <code>local_policy.jar</code> y <code>US_export_policy.jar</code> a la carpeta mostrada en la notificación de su pantalla. Sobrescriba cualquier fichero existente con los mismos nombres.</p></li>
<li><p>Reinicie I2P.</p></li>
</ol>
<p>Algunos países tienen restricciones sobre la robustez permitida al software
de criptografía. Si no está seguro acerca de las restricciones en su país,
consulte con un abogado.</p>
<h2 id="Technical-Concept">5. Concepto técnico</h2>
<p>I2P-Bote es un sistema de correo electrónico completamente descentralizado
(es decir, sin servidores), con red interna propia, cifrado de extremo-a-extremo.
Soporta distintas identidades y no expone las cabeceras del correo.
@ -507,10 +526,10 @@ cuando envió un correo.</p></li>
comprueba si hay nuevos correos, ni el número de correos que una identidad
determinada recibe.</p>
<h2 id="Technical-Details">5. Detalles técnicos</h2>
<h2 id="Technical-Details">6. Detalles técnicos</h2>
<p>Vea techdoc.txt</p>
<h2 id="Terminology">6. Terminología/Glosario de Términos</h2>
<h2 id="Terminology">7. Terminología/Glosario de términos</h2>
<h3>Identificación de (router-I2P/nodo) I2P-Bote:</h3>
<p>Ésta es la identificación con la que se conoce a un router I2P-Bote.
@ -591,7 +610,7 @@ muchos saltos y/o tiempos de retardo largos, no se sorprenda si su correo
no alcanza su destino demasiado pronto. Por supuesto le llevará más
tiempo - ¡hasta varios días!</p>
<h2 id="Credits">7. Reconocimientos</h2>
<h2 id="Credits">8. Créditos</h2>
<p>Vea <a href="about.jsp">la página Acerca de</a>.</p>
<h2>¡¡ DISFRUTE DE LA EMOCIÓN DE BOTE !!</h2>

View File

@ -10,10 +10,11 @@
<p><a href="#Settings">2.5. Les préférences de réglages (et ce qu'elles signifient)</a></p>
<p><a href="#Gateway">2.6. E-mails de et vers l'Internet</a></p>
<p><a href="#Considerations">3. Considérations sur l'anonymat</a></p>
<p><a href="#Technical-Concept">4. Concept technique</a></p>
<p><a href="#Technical-Details">5. Détails techniques</a></p>
<p><a href="#Terminology">6. Terminologie/Glossaire</a></p>
<p><a href="#Credits">7. Remerciements</a></p>
<p><a href="#Troubleshooting">4. Diagnostic des pannes</a></p>
<p><a href="#Technical-Concept">5. Concept technique</a></p>
<p><a href="#Technical-Details">6. Détails techniques</a></p>
<p><a href="#Terminology">7. Terminologie/Glossaire</a></p>
<p><a href="#Credits">8. Crédits</a></p>
</nav><h2 id="Introduction">1. Introduction</h2>
<p>I2P-Bote est une application de messagerie sécurisée pour I2P, à anonymat
@ -351,7 +352,20 @@ avec ces autres avec la même adresse il vous reconnaitrons. Ils ne
pourraient pas si vous aviez utilisé une identité différente pour
vous adresser à eux.</p>
<h2 id="Technical-Concept">4. Concept technique</h2>
<h2 id="Troubleshooting">4. Diagnostic des pannes</h2>
<h3 id="Unlimited-Strength-Crypto">4.1. Notification au sujet de "JCE Unlimited Strength Jurisdiction Policy files"</h3>
<p>Si vous avez une notification au bas de votre écran au sujet de "JCE Unlimited Strength Jurisdiction Policy files", cela signifie que votre installation Java est restreinte à ne pas pouvoir utiliser la cryptographie forte qu'I2P-Bote exige.</p>
<p>Vous pouvez permettre la cryptographie forte en suivant les étapes ci-dessous :</p>
<ol>
<li><p>Télécharger les fichiers "JCE Unlimited Strength Jurisdiction Policy" depuis le <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">site web d'Oracle</a>. Vous pourriez avoir besoin d'utiliser votre navigateur classique.</p></li>
<li><p>Décompressez le fichier zip téléchargé.</p></li>
<li><p>Déplacez les fichiers <code>local_policy.jar</code> et <code>US_export_policy.jar</code> dans le dossier montré dans la notification sur votre écran. Écrasez n'importe quels fichiers existants qui auraient les mêmes noms.</p></li>
<li><p>Redémarrer I2P</p></li>
</ol>
<p>Certains pays ont des restrictions concernant la force autorisée aux logiciels cryptographiques. Si vous n'êtes pas sûrs des restrictions dans votre pays, consultez un avocat.</p>
<h2 id="Technical-Concept">5. Concept technique</h2>
<p>I2P-Bote est un système de messagerie électronique qui : est chiffré de bout en bout, interne au réseau, entièrement décentralisé (c'est-à-dire sans serveur). Il supporte différentes identités et n'expose pas d'en-têtes de courrier électronique. Actuellement, il a encore un statut de logiciel alpha. Il est accessible via la console Web, et supporte IMAP et SMTP, par conséquent les courriers-bote peuvent être lus et écrits par des logiciels clients classiques de courrier électronique. Il est prévu de garantir de l'anonymat supplémentaire en fournissant une option de transport à haute latence. Tous les courriers-bote sont chiffrés automatiquement de bout en bout, pour qu'il n'y ait aucun besoin de configurer du chiffrage de courrier électronique supplémentaire (quoique vous puissiez le faire), et les courriers-bote sont authentifiés automatiquement. Comme il est décentralisé, il n'y a aucun serveur de courrier électronique qui pourrait lier des identités de courrier électronique différentes comme communiquant l'une avec l'autre (<em>profiling<em>) : même les noeuds retransmettant les courriers ne connaîtront pas l'expéditeur en dehors de l'expéditeur du destinataire, seuls le bout du tunnel de courrier à haute latence et les noeuds de stockage sauront à qui (identité anonyme) le courrier est destiné. Il est donc possible que l'expéditeur original soit parti hors connexion longtemps avant que le courrier devienne disponible de l'autre côté. Ceci augmente le degré d'anonymat qu'il est possible d'atteindre avec I2P-Bote. Pour les utilisateurs qui ne veulent pas de délais élevés : tous ces paramètres sont réglables par l'utilisateur, donc chaque utilisateur choisit finalement combien d'anonymat il veut.</em></em></p>
<p>Les nœuds I2P-Bote stockent les messages cryptés dans une table de
@ -462,10 +476,10 @@ il a envoyé un message.</p></li>
relève les nouveaux messages, ni ne nombre de messages reçus par une identité
donnée.</p>
<h2 id="Technical-Details">5. Détails techniques</h2>
<h2 id="Technical-Details">6. Détails techniques</h2>
<p>Voir techdoc.txt</p>
<h2 id="Terminology">6. Terminologie/Glossaire</h2>
<h2 id="Terminology">7. Terminologie/Glossaire</h2>
<h3>Identité du routeur/nœud I2P-Bote:</h3>
<p>C'est l'identité par laquelle le routeur I2P-Bote est connu. Elle est
@ -547,7 +561,7 @@ particulièrement avec de nombreux sauts et/ou de longs retards, ne soyez pas
surpris si vos messages n'arrivent pas rapidement à destination. Ça prendra
évidemment plus de temps - jusqu'à plusieurs jours!</p>
<h2 id="Credits">7. Remerciements</h2>
<h2 id="Credits">8. Crédits</h2>
<p>See <a href="about.jsp">the About page</a>.</p>
<h2>ENJOY THE BOTE FEELING!!</h2>

View File

@ -0,0 +1,493 @@
<div>
<h1>Användarguide</h1>
<nav><p><a href="#Introduktion">1. Introduktion</a></p>
<p><a href="#How-To">2. Att använda I2P-Bote</a></p>
<p><a href="#Starting">2.1. Starta I2P-Bote</a></p>
<p><a href="#Creating-Identities">2.2. Skapa en Identitet</a></p>
<p><a href="#Sending-Receiving">2.3. Skicka och ta emot email</a></p>
<p><a href="#Address-Book">2.4. Lokal adressbok</a></p>
<p><a href="#Settings">2.5. Inställningar (och vad de betyder)</a></p>
<p><a href="#Gateway">2.6. Email till och från internet</a></p>
<p><a href="#Considerations">3. Överväganden kring anonymitet</a></p>
<p><a href="#Troubleshooting">4. Felsökning</a></p>
<p><a href="#Technical-Concept">5. Tekniska Koncept</a></p>
<p><a href="#Technical-Details">6. Tekniska Detaljer</a></p>
<p><a href="#Terminology">7. Terminologi/Ordlista</a></p>
<p><a href="#Credits">8. Credits</a></p>
</nav><h2 id="Introduction">1. Introduktion</h2>
<p>I2P-Bote är ett användarvänligt, mycket anonymt och säkert epostprogram för
I2P. Det är ett serverlöst, helt decentraliserat system som etablerar/formerar ett
peer-till-peer-nätverk ovanpå det moderna
låglatens-anonymiseringsnätverket
I2P; dessutom lägger det till en valbar mixminion-liknande höglatens-transport och
undviker därigenom låglatens-nätverkens tillkortakommanden.</p>
<p>Därför, I2P-Bote drar full nytta av den anonymitet som levereras av I2P, plus att den genererar sin egen anonymitet genom att lägga till ytterligare ett anonymiseringslager (overlay network).</p>
<p>Det är detta koncept av anonymitet i lager som gör I2P-Bote så flexibelt: du kan konfigurera den att vara extremt anonym och långsam, eller mindre anonym men snabbare/mer effektiv. Hur som helst, I2P-Bote levererar alltid väldigt bra anonymitet för både avsändare och mottagare såväl som kryptering ändpunkt-till-ändpunkt. Frånsett om du skickar mail till eller från det vanliga internet, kommer ALLA email - innehållet, bilagorna och header utom mottagarens adress (subject, date time sender address, &hellip;) att vara krypterade från punkt till punkt. Mottagerns adress är endast synlig för mail-routens sista nod som sparar paketen i kad-nätverket och respektive lagringsnoder, men de kan inte läsa mailets innehåll, vem som skickat det eller vem som hämtar det.</p>
<p>I2P-Bote erbjuder möjligheten att göra din kommunikation ytterligare mer anonym
genom att aktivera höglatens mail-routes - dock till ett pris.
Användare som vill att deras anonyma email skall anlända så snabbt som möjligt bör
avaktivera mail-routes och använda 'direkt' leverenas över I2P. Detta garanterar
att de aldrig kommer att vara mindre anonyma än den nivå av anonymitet som erbjuds av
I2Ps standardförbindelse.</p>
<p>För att åstadkomma hög användbarhet, har vi gjort det möjligt att använda den med
standardklienter för email som Thunderbird, Evolution eller Kmail, utan att behöva
oroa dig för vilken extra informaiton dessa applikationer skickar i sina headers.
Dessutom finns det ett web-interface som låter dig skicka och läsa email eller
hantera dina inställningar och identiteter.</p>
<h2 id="How-To">2. Att använda I2P-Bote</h2>
<h3 id="Starting">2.1 Starta I2P-Bote</h3>
<p>Efter att du startat I2P-Bote (som förval startar den automatiskt när
din I2P-router startar) tar det lite mer än tre minuter innan
allting är igång och fungerar.</p>
<p>Så ta en titt på 'Nätverksstatus' till vänster. Där bör det stå 'Ansluten'</p>
<p>Om du vill använda I2P-Bote själv, måste du först skapa en identitet.</p>
<h3 id="Creating-Identities">2.2. Skapa en Identitet</h3>
<p>Klicka på 'Identiteter' till vänster och därefter på knappen 'Ny Identitet'</p>
<p>Fyll i minst ett 'Offentligt Namn' och tryck sedan på 'Skapa'. Det är allt som behövs för att skapa en identitet.</p>
<p>Det offentliga namnet är namet du ser för denna identet (användbart om du
har olika identiteter för olika grupper av användare som du kommunicerar med eller olika syften)
och det kommer at skickas som 'sändarens namn' till mailets mottagare.
Ett offentligt namn behöver inte vara unikt.</p>
<p>(Eftersom du kan välja vilket namn som helst här - vem som helst kan kalla sig HungryHobo
där - är det inte lämpat att användas av mottagern för att tala om ifall två mail
kommer från samma avsändare. Detta är orsaken till att namnet som sparas i den lokala adressboken
(det kan bara finnas ett namn per destinationsnyckel) visas, om det finns ett,
och du kommer att se en grön bock i kolumnen "Känd", som talar om att det
är ett lokalt känt namn. Om det inte finns någon förkomst av en destination i den lokala adressboken,
kommer namnet som uppges av avsändaren att visas med ett prefix {UNK} i mailklienterna).</p>
<p>Du kan också fylla i de andra fälten om du vill:</p>
<p>Beskrivning - detta fält lagras lokalt. Det är bara till för bekvämlighets skull:
om du vill lägga till ytterligare information för dig själv om denna identitet, kan du skriva den här.</p>
<p>Email Adress - detta fält används inte än.</p>
<p>Välj någon av krypteringsalgoritmerna. Om du är tveksam, håll dig till förvalen.</p>
<p>Du kan klicka på namnet på en en av dina identiteter och sen koipera den långa nyckeln
som visara under 'Email-destination'. Dett är din email-adress i I2P-Bote. Om
du vill att någon skall kunna skicka bote-mail till dig, måste hen ha den långa nyckeln.</p>
<p>Nu kan du skicka och ta emot I2P-Bote mail.</p>
<p>Men du bör också ta en titt på dina I2P-Boteinställningar och se om dom passar dina behov.</p>
<p>(Du kan också skapa olika identiteter och tilldela var och en av dem olika inställningar.)</p>
<h3 id="Sending-Receiving">2.3. Skicka och ta emot email</h3>
<p>Du måste ha I2P-Botes email-destinationsnyckel för andvändaren du skall skicka bote-mail till.</p>
<p>För att kunna skicka ett meddelande, klicka på 'Ny', välj din egen sändaridentitet
eller 'Anonym' under 'Från' och skriv in mottagerns mail-destinationsnyckel
eller som ett alternativ en adress på 'Till:'-raden.</p>
<p>(Alternativt kan du trycka på 'Addressbok'-knappen under denna linje
för att välja från email-destinationer lagrade lokalt i din adressbok:
Markera användarer/na du vill skall ha ditt mail och tryck på 'Lägg till Mottagare'.)</p>
<p>Du kan lägga till flera mottagare och ändra 'Till' till 'Kopia' eller 'Dold kopia'</p>
<p>Plus-knappen lägger till ytterligare mottagar-linjer.</p>
<p>Skriv nu ditt bote-mail och tryck på 'Skicka' för att sända det, eller 'Spara' för att
spara det som ett utkast i din 'utkast'-mapp eller någon annan användar-definierad mapp.</p>
<p>När du trycker på 'Skicka' placeras ditt email i Utkorg-mappen och du kan
fortsätta använda I2P-Bote, d v s skriva andra mail eller helt enkelt göra andra saker.
2P-Bote skickar nu ditt email. När det är skickat tas det automatiskt bort från din
Utkorg och lagras i din Skickat-mapp. Detta betyder att ditt mail är på väg till
mottagaren (om du inte har satt en fördröjning, men det är avaktiverat som förval).</p>
<p> I I2P-Bote är email automatiskt signerade (om du inte skickar dem utan avsändare).</p>
<p>Du kan också skicka email utan att specificera <em>någon</em> sändares
identitet/destination/adress, välj bara 'Anonym' i rullistmenyn 'Från:'.</p>
<p>Med de förvalda inställningarna kommer I2P-Bote automatiskt att kolla nya email, och allt du behöver
göra för att se om du fått några email är att titta i din Inkorg (länken 'Inkorg' till vänster).</p>
<p>Du kan forcera en manuell kontroll genom att trycka på 'Kontrollera Mail'-knappen. Detta är en
global kontroll, som försöker hämta nya mail för alla dina identiteter, utom dom du har tagit bort från
global kontroll. [Ännu inte implementerat]</p>
<p>Antalet olästa email visas i parentesen brevid mappens namn i sidofältet.</p>
<p>Klicka på 'Inkorg' för att se en lista över mottagna email. Du kommer att se två kolumner
med kryss eller gröna bockar. Dessa visar om mailet innehåller en giltig signatur och är autentiskt (Sig)
och om sändarens email-destinationsnyckel är känd lokalt, d.v.s i din adressbok (Känd). Därför
betyder två gröna bockar brevid ett mail att identiteten för detta email är känd och att denna
identitet har signerat mailet.</p>
<p>Om du har ett visst namn i din adressbok och du får ett mail från en
identitet med det namnet, och Känd <em>inte</em> visar en grön bock,
då är det en <em>annan</em> destination som har skickat och signerat detta mail; hen
har bara råkat ta samma namn som du har valt till en av dina kontakter. </p>
<p>Om det där är en grön bock för 'Sig', så är mailet korrekt signerat av sändaren
och du kan lägga till den till din adressbok under ett annat namn, som nu kommer att visas som sändare.</p>
<p>Ett mail utan sändardestination ('Det står 'Anonym') kommer naturligtvis att ha två kryss.</p>
<p>Genom att klicka på ett email som visas i din inbox öppnar du mailet.</p>
<p>Det samma gäller alla andra mappar.</p>
<p>(På grund av I2P-Botes ditribuerade natur, tar det några minuter såväl att skicka som
att kontrollera och ta emot email. Med mail-routes aktiverade ännu mer. Men du behöver inte ha din
browser öppen för det, bara lämna I2P-Bote som en bakgrundsrpocess - detta ökar också anonymiteten.)</p>
<h3 id="Address-Book">2.4. Lokal Adressbok</h3>
<p>Om du har I2P-Bote email-nyckeln från någon som du kommer att skriva mer frekvent till,
är det behändigt att spara nyckeln lokalt i din adressbok (länk till vänster), ange ett namn du väljer för
denna kontakt och klistra in destinationen på motsvarande line, spara sen.</p>
<p>Du bör normalt spara destinationer till din adressbok, så att nästa gång
du får ett mail från samma avsändare visas detta ('Loc' är markerat) och ett mail
som är skickat av någon annan som använder samma namn är markerat som INTE känd lokalt (ett kryss
i web-UIs 'Känd' kolumn eller {UNK} före avsändaren i IMAP), så att du vet att det är en ny/annan avsändare.</p>
<h3 id="Settings">2.5. Inställningar (och vad de betyder)</h3>
<p>Under inställningar kan du välja att I2P-Botes gränssnitts <em>språk</em>
(för närvarande engelska eller tyska) och bestämma huruvida även med en icke-engelsk språkinställning
allting som läggs till automatiskt till ett mail när du svarar
kommer att vara på engelska i alla fall, så att mottagaren inte vet att din I2P-Bote är
inställd på ett annat språk. Annars skulle mottagaren kunna gissa din nationalitet vilket skulle
skada din anonymitet.</p>
<p>Här kan du också justera tidsintervallet för <em>utomatisk kontroll</em> av
email och bestämma om skall skicka någon <em>tidsstämpel</em> med dina mail,
vilket indikerar när mailet skickades. Tidsstämplar är alltid i UTC.</p>
<p>(När man använder mail-routes, är tidsstämplar automatiskt avaktiverade.) [inte
implementerat ännu]</p>
<p>automatisk kontroll av email:</p>
<p>För bekvämlighets skull finns det en alternativ: 'Kontrollera mail varje XX minut'</p>
<p>Här kan du specificera hur ofta din I2P-Bote app skall försöka hämta olästa
mail till dina identiteter. Detta kan ställas in per identitet. [inte implementerat ännu]</p>
<p>Om du specificerar ett slumpmässigt offset, så väntar den inte med att kontrollera _exakt_ varje XX
minut, utan snarare varje (XX+-offset*XX)minuter, d.v.s efter en slumpmässigt vald tid mellan
(1-offset)XX minuter och (1+offset)XX minuter. [ännu inte implementerat]</p>
<p>Du kan också helt avaktivera automatisk kontroll för en speciell identitet.</p>
<p>(Om du är osäker om de här inställningarna, använd förvalen. De borde fungera för dig).</p>
<p><em>E-postreläer</em> är kedjor av I2P-Botenoder som agerar relä/router för
andra noder och följer fördröjningar per hopp, och erbjuder på så sätt en transport med hög latens
för ökad anonymitet.</p>
<p>Du kan specificera antalet noder (här kallde hopp) som skall kedjas ihop
för att skapa en mail-route. Då kommer varje email-paket som skickas av identiteten
som har en mail-route aktiverad gå igenom en route av n hopp innan den sparas. Du kan ange
en fördröjning för varje hopp individuellt, då inget hopp kommer att veta tidpunkten när ett paket
väntar vid nästa hopp, vilket gör timingen oförutsägbar. [individuella inställningar för per-hop och per-identitet
är ännu inte implementerade]</p>
<p>Som fördröjning kan du specificera en tidsram (t.ex. 60-600 minuter) - sen kommer
en slumpmässig väntetid mellan de två värdena att väljas för paketet vid det hoppet -
eller en fixerad tid, då kommer paketet att vidarebefordras efter den bestämda tiden, d.v.s
middagstid UTC, oavsett när det ankom. [fixerad tid ännu inte implementerad]</p>
<p>(När man använder mail-routes, är tidsstämplar automatiskt avaktiverade.) [ännu inte
implementerat]</p>
<p>Under <em>Mixing anonymity</em> (minsta antal relayer
som kommer att skickas) kan du specificera ett tröskelvärde. Eftersom din nod endast kan
agera pålitligt som mixer om det finns tillräckligt många främmande paket att mixa och blanda
egna paket med, kommer den att samla meddelanden vars fördröjningstid är över tills
den når den lägre gränsen. Endast när den överskrids börjar din nod skicka ut dem
i slumpmässig ordning.</p>
<p><em>exludera identitet från global kontroll</em>[Ännu inte implementerat]</p>
<p>Om du aktiverar detta val för en av dina identiteter så kommer denna inte att påverkas av
global manuell kontroll av mail eller någon global kontroll alls.</p>
<h3 id="Gateway">2.6. Email till och från internet.</h3>
<p>[INTE ÄNNU IMPLEMENTERAD!]</p>
<p>För att kunna skicka bote-mail till internet och ta emot mail fron internet med din I2P-Bote måste du först
registrera en lämplig mail-gateway. Fär närvarande finns det bara en: postman.</p>
<ol>
<li><p>Börja med att gå till
<a href="http://hq.postman.i2p/?page_id=16">http://hq.postman.i2p/?page_id=16</a>
och registrera ett konto. Om du redan har ett konto eller precis har skapat ett som beskrivet, gå vidare till #2.</p></li>
<li><p>För ett existerande konto kan du lägga till din I2P-Bote maildestination, så att
email som kommer från internet vidarebefordras till din I2P-Bote app. För att göra detta gå till:
<a href="http://hq.postman.i2p/?page_id=74">http://hq.postman.i2p/?page_id=74</a>
och ange den efterfrågade informationen.</p></li>
</ol>
<p>Alla email som skickas till den adressen
(<a href="mailto:name@i2pmail.org">name@i2pmail.org</a> från det yttre internet
eller <a href="mailto:name@mail.i2p">name@mail.i2p</a> för mail från andra postman-användare)
kommer nu att vidarebefordras via I2P-Botes nätverk till din I2P-Bote att.</p>
<p>(N.B. Användandet av <a href="mailto:name@mail.i2p">name@mail.i2p</a> eller
<a href="mailto:name@i2pmail.org">name@i2pmail.org</a> adresser i stället för
den långa adressen, gör att mailen inte längre krypteras punkt-till-punkt. Därför rekommenderas
det att byta I2P-Bote mail-destinationer (nycklar) för att kommunicera inom nätverket.
Postman har erbjudit hög kvalitet på sin service för I2P länge, men var medvetem om att det är en
centraliserad punkt som kan försvinna en dag, eller värre, tas över av någon som manipulerar mail.
Vad gäller interna nätverks-mail som kommunikation, så ser I2P-Bote till att om du använder
adressnycklar kan ingen mixtra med mailen du skickar eller tar emot.)</p>
<p>Om du inte bara vill ta emot mail från internet men också skicka email från I2P-Bote, måste du
ge din I2P-Bote destinationsnyckeln till din gateway, så att din I2P-Bote vet var den skall skicka mailen.</p>
<p>Du kan göra detta under 'Inställningar'. Denna gateway kommer att ge I2P-Botes användare
möjlighet att kommunicera med vanliga email-användare på internet såväl som användare av postmans
klassiska i2pmail-service (@mail.i2p).</p>
<p>För att motverka missbruk kommer det att finnas en begränsning av antalet email
du kan sända ut till internet; precis som för vanliga postman email-användare: Om en användare av I2P-Bote
överskrider kvoten av utgående mail, kommer de överskjutande mailen att studsa tillbaka.</p>
<h2 id="Considerations">3. Överväganden om anonymitet.</h2>
<p>Skicka inte identifierbar information om dig själv (namn, adress, geografisk adress,
tidszon, ålder, sajter du nyligen besökt eller bloggat om, användarnamn,
ipnummer, I2P-routerid, I2P-Bote id, personnummer, kreditkortsnummer, &hellip;, kopior av ditt pass,
körkort, hyreskontrakt, foton (med eller utan kläder), dokument som innehåller ditt
användarnamn i författarinformationen, och mycket mycket mer)!</p>
<p>Om möjligt,</p>
<ul>
<li><p>låt I2P-Bote köra dygnet runt,</p></li>
<li><p>använd mailroutes med slumpmässiga fördröjning per-hopp och /eller fixerad sänttid per-hopp, [ännu inte <em>helt</em> implementerad]</p></li>
<li><p>använd ett långt tidsintervall för kontroll,</p></li>
<li><p>använd en lång låkal fördröjning för egna paket,</p></li>
<li><p>använd ett stort slumpmässigt kontrollintervall. [ännu inte implementerat]</p></li>
</ul>
<p>Du kan undertrycka sändandet av datum och tid i mailets header.</p>
<p>När du svarar på ett email läggs viss markörer till för att visa mottagare att detta
är ett svar, som t.ex. 'Svar: [ämnet för mailet du svarar på]' eller '[användarnamn] skrev:'.
Dessa är olika för språken du kan välja i språkinställningarna. Emellertid, om du inte vill att mottagaren
skall veta vilket språk du har satt, kan du undertrycka översättning av dess markörer, att de kommer
att vara på engelska, oavsett vilket språk som är inställt. För att göra detta, markera 'Använd engelska för
text som läggs till utgående mail ('Re:, ''wrote:', etc.)'</p>
<p>Var försiktig med innehållet. Inkludera inte personlig information eller
information som bara du äger. Skriv inte 'Jag går och lägger mig nu, det är sent'
när du inkluderar tidsstämplar.</p>
<p>Språket du skriver på, din stil och dina formuleringar kan också vara av intresse för en motståndare</p>
<p>I2P-Bote erbjuder också möjligheten att använda olika email-identiteter.
Antag att en av dina kontakter får reda på din identitet, eftersom du glömde radera
identifierbar information i ett hemligt dokument du skickat till hen. Om detta
mails mottagare skulle samarbeta med andra som du är i kontakt med, kunde hen
avslöja den riktiga identitet som hör till den Bote-adress hen har från dig.
Så, om du kommunicerar med dessa andra användande samma Bote-adress, kommer de
att kunna veta vem du är. Det går inte om du använder en annan adress för att
skicka mail till dem.</p>
<h2 id="Troubleshooting">4. Felsökning</h2>
<h3 id="Unlimited-Strength-Crypto">4.1 Meddelande om JCE Unlimited Strength Jurisdiction Policy files.</h3>
<p>Om du har ett meddelande längst ner på skärmen om JCE Unlimited
Strength Jurisdiction Policy files, så betyder det att din Javainstallation är förhindrad att använda den starka kryptografi som I2P-Bote kräver.</p>
<p>Du kan aktivera stark kryptering genom att följa stegen nedan:</p>
<ol>
<li><p>Ladda nerJCE Unlimited Strength Jurisdiction Policy files från<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Oracles website</a>. Du kanske måste använda en vanlig webläsare.</p></li>
<li><p>Packa upp den nedladdade zip-filen.</p></li>
<li><p>Flytta filerna <code>local_policy.jar</code> och <code>US_export_plicy.jar</code> till mappen som anges i meddalande på din skärm. Skriv över existerande filer med samma namn.</p></li>
<li><p>Starta om I2P</p></li>
</ol>
<p>Vissa länder har restriktioner på den tillåtna kryptografiska styrkan
på mjukvara. Om du är osäker om restriktioner i ditt land, rådfråga juridisk expertis.</p>
<h2 id="Technical-Concept">5. Tekniskt koncept</h2>
<p>I2P-Bote är ett punkt-till-punkt krypterat, nätverksinternt, helt decentraliserat
(d.v.s serverlöst) email-system. Det stöder olika identiteter och avslöjar inte
email-headers. För närvarande är det fortfarande alpha software. Det kan användas
via webkonsoll, och det har IMAP och SMTP-support, så bote-mail kan läsas och skrivas av en vanlig
email-klient. I planerna finns också att garantera ytterligare anonymitet genom att erbjuda hög-latens transport
som tillval. Alla bote-mail krypteras automatiskt punkt-till-punkt, så man behöver inte
konfiguera eller tillämpa extra email-kryptering (även om man kan göra det också), och bote-mail
autenticeras automatiskt. Eftersom det är ett decentraliserat system finns det inga mail-servrar
som kan knyta olika email-identiteter till varandra (<em>profiling</em>): Inte ens noderna som relayar mail kommer att känna till avsändaren
och förutom avsändare och mottagare, kommer endast höglatens-tunneln för mail och lagringsnoderna att veta till vilken anonym identitet
mailet skickas. Den ursprungliga avsändaren kan ha gått off-line långt innan mailet
blir tillgängligt för den andra sidan. Detta ökar på anonymiteten som kan nås med I2P-Bote.
För dom som inte vill ha hög fördröjning: Alla dessa inställningar är användar-valda,
så var och en beslutar själv hur mycket anonymitet hen vill ha.</p>
<p>I2P-Botes noder lagrar krypterade email i en Kademlia DHT. Därför kan ett email
skickas genom ett antal andra noder (relays) för ökad säkerhet, eller direkt till ett set
av lagringsnoder för snabbare leverans. Det samma gäller hämtning av mail.</p>
<p>(När mail-routes används, avaktiveras automatiskt tidsstämplar.) [Hämta via
relays är ännu inte implementerat]</p>
<p>Alla noder är likvärdiga: Det finns inga 'supernoder' eller speciella relay/lagringsnoder.
Alla agerar som potientiella relay och lagringsnod. Det
maximala diskutrymme som används för relayade/sparade mail-paket kan ställas in av användaren.</p>
<p>Innan ett email skickas till ett relay, delas det upp i paket och
krypteras med mottagarens offentliga nyckel. Dess paket lagras redundant i
en distribuerad hashtabell (DHT).</p>
<p>De sparas i minst 100 dagar, under vilken tid mottagaren kan ladda ner dem.</p>
<p>Relaypaket går också ut efter 100 dagare eller mer.</p>
<p>Om en nod får slut på lagringsutrymme för email, och det inte finns några gamla paket som kan raderas,
avvisar noden förfrågningar om lagring.</p>
<p>Dessutom, I2P-Bote rensar mail-headers och tillåter inte att någon onödig information
skickas, vilket tillåter email-klienter utan tidigare kontroll av denna klient sänder i mail-headers.</p>
<p>All kryptering, val av rutt och profilering sker lokalt så att ingen tredje part
är involverad.</p>
<p>I2P-Bote kräver ingen central nod ens för bootstrapping, eftersom den använder Seedless.</p>
<p>Om du använder I2P-Bote korrekt, d.v.s med övervägandena ovan och med sunt förnuft,
kommer ingen att kunna ta reda på vem eller var du är. Om du redan övervakas och din internetuppkoppling
sniffas, kan övervakaren inte se vad eller till vem du skickar post eller varifrån du tar emot post eller var dina
kontakter finns.</p>
<p>Låt oss gå in lite mer i detalj:</p>
<h3>Vad I2P-Bote <em>verkligen döljer</em>:</h3>
<p>I2P-Bote döljer både identiet och plats för sändare och mottagare, liksom även
de mellanliggande noderne (relay och lagring), innehållet i dina mail, deras storlek och antalet mail du skickar.</p>
<p>Endast mottagaren kan känna till avsändarens botemail-destination, och om han väljer att
inte sända sin destination, kan inte ens mottagaren veta den.</p>
<p>Inte ens om du skicka tidsstämplar kommer din tidszon att avslöjas.</p>
<p>Dessutom döljer I2P-Bote:</p>
<ul>
<li><p>det faktum att du kör I2P-Bote</p></li>
<li><p>det faktum att du skicka mail</p></li>
<li><p>det faktum att du tar emot mail</p></li>
<li><p>tidpunkten när du skickar mail</p></li>
<li><p>tidpunkten när du tar emot mail</p></li>
<li>
<p>den övre gränsen av mängden mail en okänd användare tar emot</p>
<ul>
<li><p>en abstrakt användare, inte en konkret, räkna ut existensen från
en existerande mail-identitet eftersom hen kan ha mer än en mail-identitet</p></li>
</ul>
</li>
<li><p>den lägre gränsen, eftersom en identitet också skickar ut test och attrapp-meddelanden</p></li>
</ul>
<h3>Vad I2P-Bote <em>döljer delvis</em>:</h3>
<p>I2P-Botes adress till mottagaren är endast känd av sändare och mottagare.</p>
<p>Om det finns flera mottagare, kommer var och en att se alla andra som fick mailet via 'Till:' eller 'Kopia:'</p>
<p>Alla som listas under 'Dold kopia:' kommer att vara synliga endast för avsändaren och själva mottagaren.</p>
<p>Tiden för avsändandet kommer, om alls, endast att vara synlig för avsändare och mottagare.</p>
<h3>Vad I2P-Bote <em>kan dölja som tillval</em>:</h3>
<ul>
<li><p>Om mailroutes används, tiden ett bote-mail skickas</p></li>
<li><p>Om mailroutes används, tiden ett botemail hämtas. [ännu inte implementerat]</p></li>
<li><p>Om avsändaren undertrycker tidsstämplar kommer endast avsändaren själv veta när han skickat ett mail.</p></li>
</ul>
<h3>vad I2P-Bote <em>inte kan dölja</em>:</h3>
<p>I2P-Bote kan inte dölja hur ofta en given identitet kontrollerar nya mail eller
antalet mail en given identitet tar emot.</p>
<h2 id="Technical-Details">6. Tekniska detaljer</h2>
<p>Se techdoc.txt</p>
<h2 id="Terminology">7. Terminologi/Ordlista</h2>
<h3>I2P-Bote (router/nod) id:</h3>
<p>Detta är den id en I2P-Bote router är känd. Det används för att kontakta
denna router, för lagring, relaying och för att hämta mail, men också för krypteringen hopp-till-hopp
och för att helt enkelt den via I2P, eftersom det är detsamma som routerns destination för I2P-tunnel.
Det visas för att reprensentera en I2P-Botenod i stats.</p>
<p>Så routerns id motsvarar I2P-destinationen (adressen av en I2P-Botenod i I2P-nätverket -
det finns ingen anledning att känna till den om du inte har problem med att ansluta till andra I2P-Botenoder).</p>
<h3>I2P-Bote email-destination:</h3>
<p>I2P-Botes email-destination (nyckel) är en identifierare med vilken någon kan nås
via I2P-Bote, precis som namnet anger: en email-destination. Därför är
den för I2P-Bote vad en emailadress är för vanlig email: Destinationen är den faktiska adress
för att skicka email, för att lagra och hämta dem från DHT. På samma gång används den för kryptering
punkt-till-punkt av email, header-information och bilagor.</p>
<p>En email-destination för I2P-Bote är en Base64 sträng som innehåller en offentlig
krypteringsnyckel och en signeringsnyckel för verifikation. Exempel:</p>
<pre>uQtdwFHqbWHGyxZN8wChjWbCcgWrKuoBRNoziEpE8XDt8koHdJiskYXeUyq7JmpG
In8WKXY5LNue~62IXeZ-ppUYDdqi5V~9BZrcbpvgb5tjuu3ZRtHq9Vn6T9hOO1fa
FYZbK-FqHRiKm~lewFjSmfbBf1e6Fb~FLwQqUBTMtKYrRdO1d3xVIm2XXK83k1Da
-nufGASLaHJfsEkwMMDngg8uqRQmoj0THJb6vRfXzRw4qR5a0nj6dodeBfl2NgL9
HfOLInwrD67haJqjFJ8r~vVyOxRDJYFE8~f9b7k3N0YeyUK4RJSoiPXtTBLQ2RFQ
gOaKg4CuKHE0KCigBRU-Fhhc4weUzyU-g~rbTc2SWPlfvZ6n0voSvhvkZI9V52X3
SptDXk3fAEcwnC7lZzza6RNHurSMDMyOTmppAVz6BD8PB4o4RuWq7MQcnF9znElp
HX3Q10QdV3omVZJDNPxo-Wf~CpEd88C9ga4pS~QGIHSWtMPLFazeGeSHCnPzIRYD</pre>
<p>I2P-Bote router/nod id och I2P-Bote email-destinationer ser liknanade ut, men är i själva
verket helt oberoende av varandra.</p>
<h3>Email adress:</h3>
<p>Email-adresser i I2P-Bote är genvägar för email-destinationer.</p>
<p>&gt;Email-adressen &lt;--&gt; destinationsstrukturer för email lagras på två ställen:
den lokala adressboken och den distribuerade adresskatalogen [den senare ännu inte implementerad].</p>
<h3>I2P-Bote email-identitet:</h3>
<p>I2P-Botes email-identitet är en uppsättning av I2P-Botes nyckel för email-destination, motsvarande
privata nyckalr och ett namn tilldelat av användaren. Detta namn
kommer att skickar med destinations-nyckeln om du inte untertrycker sändning
av information om avsändaren.</p>
<p>Emellertid kommer det endast att visas för mottagaren om denne inte har något
namn för destinationen i sin lokala adressbok.</p>
<p>Så tekniskt sett består en email-identitet av fyra saker:</p>
<ul>
<li><p>en email-destination (d.v.s två offentliga nycklar)</p></li>
<li><p>tvo privata nycklar för email-destination</p></li>
<li><p>offentligt namn som kan visas för andra i email</p></li>
<li><p>en beskrivning som inte visas för någon men utom dig (den hjälper dig komma ihåg
vilken email-identitet du använder för vissa ändamål).</p></li>
</ul>
<p>Det krävs inte någon email-identitet för att skicka mail (men då kan endast
'Anonym' väljas i avsändarfältet).</p>
<h3>Mail routes:</h3>
<p>Mail-routes är en ytterligare hög-latenstransport för I2P-Bote. En kedja av noder byggs av I2P-Bote
för den sakens skull och agerar relays/routers för paket och genomför individuella fördröjningar per-hopp. [ännu inga
inställningar för indviduella fördröjningar implementerade]</p>
<p><strong>VARNING!</strong> Om du väljer detta alternativ - speciellt med många
hopp och/eller lång fördröjning skall du inte bli förvånad om mailet inte kommer fram snart. Det kommer,
naturligtvis att ta längre tid - kanske flera dagar!</p>
<h2 id="Credits">8. Erkännanden</h2>
<p>Se <a href="about.jsp">sidan Om</a>.</p>
<h2>NJUT AV BOTE-KÄNSLAN!!</h2>
</div>

View File

@ -23,6 +23,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
@ -64,14 +65,15 @@
<img src="${themeDir}/images/default.png"/>
</c:if>
</td>
<%-- Insert a random number into the request string so others can't see contacts or identities using the CSS history hack --%>
<c:set var="editIdentityURL" value="editIdentity.jsp?rnd=${jspHelperBean.randomNumber}&amp;createNew=false&amp;key=${identity.key}&amp;cryptoImpl=${identity.cryptoImpl}&amp;publicName=${ib:escapeQuotes(identity.publicName)}&amp;description=${ib:escapeQuotes(identity.description)}&amp;emailAddress=${ib:escapeQuotes(identity.emailAddress)}&amp;defaultIdentity=${identity.defaultIdentity}"/>
<td>
<%-- Insert a random number into the request string so others can't see contacts or identities using the CSS history hack --%>
<a href="editIdentity.jsp?rnd=${jspHelperBean.randomNumber}&amp;createNew=false&amp;key=${identity.key}&amp;cryptoImpl=${identity.cryptoImpl}&amp;publicName=${ib:escapeQuotes(identity.publicName)}&amp;description=${ib:escapeQuotes(identity.description)}&amp;emailAddress=${ib:escapeQuotes(identity.emailAddress)}&amp;defaultIdentity=${identity.defaultIdentity}">
<a href="${editIdentityURL}" title="Click to see identity details">
${fn:escapeXml(identity.publicName)}
</a>
</td>
<td>${identity.description}</td>
<td class="ellipsis">${identity.key}</td>
<td class="ellipsis"><a href="${editIdentityURL}" title="Click to see identity details">${identity.key}</a></td>
<td><c:choose>
<c:when test="${ib:isCheckingForMail(identity)}">
<img src="${themeDir}/images/wait.gif" alt="<ib:message key='Checking for mail...'/>" title='<ib:message key='Checking for mail...'/>'/>
@ -87,14 +89,15 @@
</table>
<p/>
<form class="onebutton" action="editIdentity.jsp?createNew=true" method="POST">
<csrf:form class="onebutton" action="editIdentity.jsp" method="POST">
<input type="hidden" name="createNew" value="true"/>
<button type="submit" value="New"><ib:message key="New Identity"/></button>
</form>
<form class="onebutton" action="importIdentities.jsp" method="POST">
</csrf:form>
<csrf:form class="onebutton" action="importIdentities.jsp" method="POST">
<button type="submit"><ib:message key="Import Identities"/></button>
</form>
<form class="onebutton" action="exportIdentities.jsp" method="POST">
</csrf:form>
<csrf:form class="onebutton" action="exportIdentities.jsp" method="POST">
<button type="submit"><ib:message key="Export Identities"/></button>
</form>
</csrf:form>
<jsp:include page="footer.jsp"/>

View File

@ -23,6 +23,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
@ -30,6 +31,11 @@
<ib:message key="Address Directory Lookup" var="title" scope="request"/>
<c:if test="${pageContext.request.method ne 'POST'}">
<ib:message key="Form must be submitted using POST." var="errorMessage" scope="request"/>
<jsp:forward page="addressBook.jsp"/>
</c:if>
<c:if test="${param.confirm eq true}">
<ib:requirePassword>
<c:set var="errorMessage" value="${ib:saveContact(param.destination, param.name, param.picture, param.text)}"/>
@ -87,7 +93,7 @@
${result.destination}
</div>
<form action="importContact.jsp" method="post">
<csrf:form action="importContact.jsp" method="post">
<input type="hidden" name="confirm" value="true"/>
<input type="hidden" name="name" value="${param.name}"/>
<input type="hidden" name="destination" value="${result.destination}"/>
@ -95,8 +101,8 @@
<input type="hidden" name="text" value="${fn:escapeXml(result.text)}"/>
<ib:message key="Import" var="import" scope="request"/>
<input type="submit" value="${import}"/>
</form>
</csrf:form>
</c:if>
</c:if>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -20,6 +20,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<%--
@ -34,6 +35,12 @@
replace - True if duplicate identities should overwrite the existing ones
--%>
<c:set var="action" value="${param.action}" scope="request"/>
<c:if test="${not empty action and pageContext.request.method ne 'POST'}">
<c:set var="action" value="" scope="request"/>
<ib:message key="Form must be submitted using POST." var="errorMessage" scope="request"/>
</c:if>
<%--
The identitiesFile request attribute contains a UploadedFile object, see MultipartFilter.java.
When action='attach', originalIdentitiesFilename contains the name of the file selected by the user.
@ -41,7 +48,7 @@
<c:set var="originalIdentitiesFilename" value="${requestScope['identitiesFile'].originalFilename}"/>
<ib:message key="Import Identities" var="title" scope="request"/>
<c:if test="${param.action eq 'import' and empty originalIdentitiesFilename}">
<c:if test="${action eq 'import' and empty originalIdentitiesFilename}">
<ib:message key="Please select an identities file and try again." var="noIdentitiesMsg"/>
<c:set var="errorMessage" value="${noIdentitiesMsg}" scope="request"/>
</c:if>
@ -49,14 +56,17 @@
<ib:requirePassword>
<c:choose>
<c:when test="${param.action eq 'import' and not empty originalIdentitiesFilename}">
<c:when test="${action eq 'import' and not empty originalIdentitiesFilename}">
<c:set var="identitiesFilename" value="${requestScope['identitiesFile'].tempFilename}"/>
<ib:importIdentities identitiesFilename="${identitiesFilename}" password="${param.nofilter_password}" overwrite="${param.overwrite}" replace="${param.replace}"/>
<ib:message var="infoMessage" scope="request" key="The identities have been imported."/>
<jsp:forward page="identities.jsp"/>
</c:when>
<c:otherwise>
<form action="importIdentities.jsp?action=import" method="POST" enctype="multipart/form-data" accept-charset="UTF-8">
<c:set var="csrf_tokenname"><csrf:tokenname/></c:set>
<c:set var="csrf_tokenvalue"><csrf:tokenvalue uri="importIdentities.jsp"/></c:set>
<form action="importIdentities.jsp?${csrf_tokenname}=${csrf_tokenvalue}" method="POST" enctype="multipart/form-data" accept-charset="UTF-8">
<input type="hidden" name="action" value="import"/>
<div class="import-form-label">
<ib:message key="Identities file:"/>
</div>
@ -88,4 +98,4 @@
</c:choose>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -23,6 +23,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
@ -41,11 +42,17 @@
new - true for new contact, false for existing contact
--%>
<c:set var="action" value="${param.action}" scope="request"/>
<c:if test="${not empty action and pageContext.request.method ne 'POST'}">
<c:set var="action" value="" scope="request"/>
<ib:message key="Form must be submitted using POST." var="errorMessage" scope="request"/>
</c:if>
<c:choose>
<c:when test="${param.action eq 'send'}">
<c:when test="${action eq 'send'}">
<jsp:forward page="sendEmail.jsp"/>
</c:when>
<c:when test="${param.action eq 'addToAddrBook'}">
<c:when test="${action eq 'addToAddrBook'}">
<c:set var="destparam" value="${param.destparamname}"/>
<jsp:forward page="editContact.jsp">
<jsp:param name="new" value="true"/>
@ -55,7 +62,7 @@
<jsp:param name="paramsToCopy" value="nofilter_sender,nofilter_recipient*,to*,cc*,bcc*,replyto*,subject,message,attachmentNameOrig*,attachmentNameTemp*,forwardUrl,backUrl,paramsToCopy"/>
</jsp:forward>
</c:when>
<c:when test="${param.action eq 'lookup'}">
<c:when test="${action eq 'lookup'}">
<jsp:forward page="addressBook.jsp">
<jsp:param name="select" value="true"/>
<jsp:param name="forwardUrl" value="newEmail.jsp"/>
@ -71,14 +78,16 @@
<c:set var="originalAttachmentFilename" value="${requestScope['newAttachment'].originalFilename}"/>
<ib:message key="New Email" var="title" scope="request"/>
<c:if test="${param.action eq 'attach' and empty originalAttachmentFilename}">
<c:if test="${action eq 'attach' and empty originalAttachmentFilename}">
<ib:message key="Please select a file to attach and try again." var="noAttachmentMsg"/>
<c:set var="errorMessage" value="${noAttachmentMsg}" scope="request"/>
</c:if>
<jsp:include page="header.jsp"/>
<ib:requirePassword>
<form id="emailform" action="newEmail.jsp" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<c:set var="csrf_tokenname"><csrf:tokenname/></c:set>
<c:set var="csrf_tokenvalue"><csrf:tokenvalue uri="newEmail.jsp"/></c:set>
<form id="emailform" action="newEmail.jsp?${csrf_tokenname}=${csrf_tokenvalue}" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<div class="email-form-button-send">
<button type="submit" name="action" value="send">&#x2794; <ib:message key="Send"/></button>
</div>
@ -164,7 +173,7 @@
<c:if test="${fn:startsWith(parameter.key, 'attachmentNameOrig')}">
<c:set var="attachmentIndex" value="${fn:substringAfter(parameter.key, 'attachmentNameOrig')}"/>
<c:set var="removeAction" value="removeAttachment${attachmentIndex}"/>
<c:set var="removed" value="${param.action eq removeAction}"/>
<c:set var="removed" value="${action eq removeAction}"/>
<c:if test="${!removed}">
<c:if test="${attachmentIndex gt maxAttachmentIndex}">
<c:set var="maxAttachmentIndex" value="${attachmentIndex}"/>
@ -189,7 +198,7 @@
</c:if>
</c:forEach>
<c:if test="${param.action eq 'attach' and not empty originalAttachmentFilename}">
<c:if test="${action eq 'attach' and not empty originalAttachmentFilename}">
<c:set var="tempAttachmentFilename" value="${requestScope['newAttachment'].tempFilename}"/>
<c:set var="maxAttachmentIndex" value="${maxAttachmentIndex + 1}"/>
<div class="email-form-attach-files">

View File

@ -23,6 +23,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="No Identity" var="title" scope="request"/>
@ -32,8 +33,9 @@
<h1><ib:message key="No Email Identity Defined"/></h1>
<p>
<jsp:include page="identitiesHelp.jsp"/>
<form action="editIdentity.jsp?new=true" method="POST">
<csrf:form action="editIdentity.jsp" method="POST">
<input type="hidden" name="createNew" value="true"/>
<button type="submit" value="New"><ib:message key="Create a New Email Identity"/></button>
</form>
</csrf:form>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -23,6 +23,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
@ -41,14 +42,14 @@
<c:set var="refreshInterval" value="20" scope="request"/>
</c:if>
<ib:message key="Outbox" var="title" scope="request"/>
<c:set var="mainClass" value="foldermain" scope="request"/>
<c:set var="contentClass" value="main foldermain" scope="request"/>
<c:set var="navSelected" value="Outbox" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="compose float">
<form action="newEmail.jsp" method="GET">
<csrf:form action="newEmail.jsp" method="POST">
<button type="submit" value="New"><img src="${themeDir}/images/compose.png"/></button>
</form>
</csrf:form>
</div>
<c:set var="sortcolumn" value="${CREATE_TIME}"/>
@ -168,4 +169,4 @@
</table>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -22,12 +22,19 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:set var="action" value="${param.passwordJspAction}" scope="request"/>
<c:if test="${not empty action and pageContext.request.method ne 'POST'}">
<c:set var="action" value="" scope="request"/>
<ib:message key="Form must be submitted using POST." var="errorMessage" scope="request"/>
</c:if>
<ib:message key="Password Required" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<c:if test="${param.passwordJspAction eq 'check'}">
<c:if test="${action eq 'check'}">
<c:choose>
<c:when test="${ib:tryPassword(param.nofilter_password)}">
<jsp:forward page="${param.passwordJspForwardUrl}"/>
@ -40,14 +47,15 @@
<h1><ib:message key="Password required"/></h1>
<form name="form" action="password.jsp?passwordJspAction=check" method="POST">
<csrf:form name="form" action="password.jsp" method="POST">
<input type="hidden" name="passwordJspAction" value="check"/>
<ib:copyParams paramsToCopy="*" paramsToExclude="nofilter_password"/>
<ib:message key="Password:"/> <input type="password" name="nofilter_password"/>
<button type="submit"><ib:message key="OK"/></button>
</form>
</csrf:form>
<script type="text/javascript" language="JavaScript">
document.forms['form'].elements['nofilter_password'].focus();
</script>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -23,6 +23,7 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<%--
@ -38,10 +39,16 @@
text - Text to include in the DHT record
--%>
<c:set var="action" value="${param.action}" scope="request"/>
<c:if test="${not empty action and pageContext.request.method ne 'POST'}">
<c:set var="action" value="" scope="request"/>
<ib:message key="Form must be submitted using POST." var="errorMessage" scope="request"/>
</c:if>
<ib:message key="Add Email Destination to Directory" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<c:if test="${param.action eq 'start'}">
<c:if test="${action eq 'start'}">
<%-- If the user changed the Public Name to try a new name that isn't taken, update it so they don't have to click save first --%>
<ib:requirePassword>
${ib:modifyIdentity(param.key, param.publicName, param.description, null, param.emailAddress, null, false)}
@ -59,9 +66,12 @@
</jsp:forward>
</c:if>
</c:if>
<c:if test="${param.action eq 'step2'}">
<c:if test="${action eq 'step2'}">
<h1><ib:message key="Publish to the Address Directory"/></h1>
<form action="publishDestination.jsp?action=store" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<c:set var="csrf_tokenname"><csrf:tokenname/></c:set>
<c:set var="csrf_tokenvalue"><csrf:tokenvalue uri="publishDestination.jsp"/></c:set>
<form action="publishDestination.jsp?${csrf_tokenname}=${csrf_tokenvalue}" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<input type="hidden" name="action" value="store"/>
<input type="hidden" name="name" value="${param.publicName}"/>
<input type="hidden" name="destination" value="${param.key}"/>
<div class="publish-form-label">
@ -81,7 +91,7 @@
<button type="submit"><ib:message key="Publish"/></button>
</form>
</c:if>
<c:if test="${param.action eq 'store'}">
<c:if test="${action eq 'store'}">
<c:set var="picFilename" value="${requestScope['picture'].tempFilename}"/>
<ib:publishDestination destination="${param.destination}" pictureFilename="${picFilename}" text="${param.text}"/>
<ib:message var="infoMessage" scope="request" key="The identity has been added to the address directory."/>
@ -89,4 +99,4 @@
<jsp:forward page="editIdentity.jsp?rnd=${jspHelperBean.randomNumber}&new=false&key=${param.destination}"/>
</c:if>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -23,9 +23,15 @@
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:if test="${pageContext.request.method ne 'POST'}">
<ib:message key="Form must be submitted using POST." var="errorMessage" scope="request"/>
<jsp:forward page="newEmail.jsp"/>
</c:if>
<ib:message key="New Email" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
@ -56,16 +62,16 @@
<ib:setEmailReplied messageId="${param.quoteMsgId}" folder="${ib:getMailFolder(param.quoteMsgFolder)}" replied="true"/>
<br/><p/>
<form action="deleteEmail.jsp" method="post">
<csrf:form action="deleteEmail.jsp" method="POST">
Delete original email?
<input type="hidden" name="folder" value="${param.quoteMsgFolder}"/>
<input type="hidden" name="messageID" value="${param.quoteMsgId}"/>
<button type="submit" name="action" value="Delete">Delete</button>
</form>
</csrf:form>
</c:if>
</ib:requirePassword>
<p/>
<a href="."><ib:message key="Go to inbox"/></a>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -22,10 +22,17 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="csrf" uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:set var="action" value="${param.action}" scope="request"/>
<c:if test="${not empty action and pageContext.request.method ne 'POST'}">
<c:set var="action" value="" scope="request"/>
<ib:message key="Form must be submitted using POST." var="errorMessage" scope="request"/>
</c:if>
<ib:message key="Set Password" var="title" scope="request"/>
<c:if test="${param.action eq 'wait'}">
<c:if test="${action eq 'wait'}">
<c:catch var="exception">
<ib:waitForPasswordChange/>
</c:catch>
@ -37,7 +44,7 @@
<c:set var="errorMessage" value="${exception.cause.localizedMessage}" scope="request"/>
</c:if>
</c:if>
<c:if test="${param.action eq 'set'}">
<c:if test="${action eq 'set'}">
<c:set var="refreshUrl" value="setPassword.jsp?action=wait" scope="request"/>
<c:set var="refreshInterval" value="0" scope="request"/>
<ib:setPassword oldPassword="${param.nofilter_oldPassword}" newPassword="${param.nofilter_newPassword}" confirmNewPassword="${param.nofilter_confirm}"/>
@ -45,13 +52,13 @@
<jsp:include page="header.jsp"/>
<c:if test="${param.action eq 'set'}">
<c:if test="${action eq 'set'}">
<h2><ib:message key="Please wait"/></h2>
<p>
<img src="${themeDir}/images/wait.gif"/> <ib:message key="Please wait while the password is being changed..."/>
</p>
</c:if>
<c:if test="${param.action ne 'set'}">
<c:if test="${action ne 'set'}">
<h1><ib:message key="Set a new Password"/></h1>
<p>
@ -63,7 +70,7 @@
</ib:message>
</p><br/>
<form name="form" action="setPassword.jsp" method="POST">
<csrf:form name="form" action="setPassword.jsp" method="POST">
<input type="hidden" name="action" value="set"/>
<div class="password-label"><ib:message key="Old password:"/></div>
@ -77,11 +84,11 @@
<p/>
<button type="submit"><ib:message key="OK"/></button>
</form>
</csrf:form>
<script type="text/javascript" language="JavaScript">
document.forms['form'].elements['nofilter_oldPassword'].focus();
</script>
</c:if>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

Some files were not shown because too many files have changed in this diff Show More