mirror of
https://github.com/moparisthebest/mailiverse
synced 2024-11-21 08:25:00 -05:00
changes to include Postfix, some changes to include OpenPGP, some changes to be able to use bouncy castle direct from git and as well bc149
This commit is contained in:
parent
fb2a267e33
commit
a1c9eb4041
@ -1 +1,2 @@
|
|||||||
cd ../java && ./build-java-projects
|
cd ../java && ./build-java-projects
|
||||||
|
|
||||||
|
@ -6,3 +6,6 @@ ant -buildfile exportScripts/MailStreamServer.xml
|
|||||||
|
|
||||||
rm exported/Tools.jar
|
rm exported/Tools.jar
|
||||||
ant -buildfile exportScripts/Tools.xml
|
ant -buildfile exportScripts/Tools.xml
|
||||||
|
|
||||||
|
rm exported/PostFixMailReceiver.jar
|
||||||
|
ant -buildfile exportScripts/PostFixMailReceiver.xml
|
||||||
|
51
build/exportScripts/PostfixMailReceiver.xml
Normal file
51
build/exportScripts/PostfixMailReceiver.xml
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<project default="create_run_jar" name="Create Runnable Jar for Project Mailiverse.Core">
|
||||||
|
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
|
||||||
|
<!--ANT 1.7 is required -->
|
||||||
|
<target name="create_run_jar">
|
||||||
|
<jar destfile="../../build/exported/PostfixMailReceiver.jar" filesetmanifest="mergewithoutmain">
|
||||||
|
<manifest>
|
||||||
|
<attribute name="Main-Class" value="mail.server.postfix.PostfixMailReceiver"/>
|
||||||
|
<attribute name="Class-Path" value="."/>
|
||||||
|
</manifest>
|
||||||
|
<fileset dir="../../java/core/bin"/>
|
||||||
|
<fileset dir="../../java/ext/bc-packaged/bin"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/annotations-api.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/catalina-ant.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/catalina-ha.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/catalina-tribes.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/catalina.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/ecj-4.2.1.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/el-api.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/jasper-el.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/jasper.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/jsp-api.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/servlet-api.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/tomcat-api.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/tomcat-coyote.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/tomcat-dbcp.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/tomcat-i18n-es.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/tomcat-i18n-fr.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/tomcat-i18n-ja.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/tomcat-jdbc.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../ext/apache-tomcat-7.0.37/lib/tomcat-util.jar"/>
|
||||||
|
<fileset dir="../../java/ext/jordanzimmerman/bin"/>
|
||||||
|
<fileset dir="../../java/ext/json/bin"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/dropbox-java-sdk-1.3.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/aws-java-sdk.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/javamail-1.4.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/activation-1.1.1.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/slf4j-api-1.3.1.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/slf4j-simple-1.3.1.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/mysql-connector-java-3.1.14-bin.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/mina-core-2.0.4.jar"/>
|
||||||
|
<fileset dir="../../java/ext/apache/bin"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/commons-codec-1.4.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/commons-logging-1.1.1.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/httpclient-4.1.1.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/httpcore-4.1.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/JavaPNS_2.2.jar"/>
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="../../java/core/lib/log4j-1.2.15.jar"/>
|
||||||
|
</jar>
|
||||||
|
</target>
|
||||||
|
</project>
|
@ -1,9 +1,10 @@
|
|||||||
./server-shutdown tunnel
|
#./server-shutdown tunnel
|
||||||
./server-deploy tomcat
|
./server-deploy tomcat
|
||||||
./server-deploy james
|
#./server-deploy james
|
||||||
|
./server-deploy postfix
|
||||||
./server-deploy mail-user
|
./server-deploy mail-user
|
||||||
./server-deploy mail-key
|
./server-deploy mail-key
|
||||||
./server-deploy tools
|
./server-deploy tools
|
||||||
./web-deploy
|
./web-deploy
|
||||||
|
|
||||||
./server-deploy tunnel
|
#./server-deploy tunnel
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
./dev-server-deploy tomcat
|
./dev-server-deploy tomcat
|
||||||
./dev-server-deploy james
|
#./dev-server-deploy james
|
||||||
|
./dev-server-deploy postfix
|
||||||
./dev-server-deploy mail-user
|
./dev-server-deploy mail-user
|
||||||
./dev-server-deploy mail-key
|
./dev-server-deploy mail-key
|
||||||
./dev-server-deploy tools
|
./dev-server-deploy tools
|
||||||
|
1
deploy/mail-user/resources/passwords/postfix
Symbolic link
1
deploy/mail-user/resources/passwords/postfix
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../passwords/postfix
|
0
deploy/postfix-user.
Normal file
0
deploy/postfix-user.
Normal file
5
deploy/postfix-user/catalog
Executable file
5
deploy/postfix-user/catalog
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
cd ~
|
||||||
|
mkdir -p deploy-catalog
|
||||||
|
V=`date "+%Y%m%d_%H%M%S"`
|
||||||
|
|
||||||
|
tar -czf deploy-catalog/deploy_$V.tar.gz deploy
|
8
deploy/postfix-user/config/dynamicmaps.cf
Normal file
8
deploy/postfix-user/config/dynamicmaps.cf
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Postfix dynamic maps configuration file.
|
||||||
|
#
|
||||||
|
#type location of .so file open function (mkmap func)
|
||||||
|
#==== ================================ ============= ============
|
||||||
|
tcp /usr/lib/postfix/dict_tcp.so dict_tcp_open
|
||||||
|
sqlite /usr/lib/postfix/dict_sqlite.so dict_sqlite_open
|
||||||
|
mysql /usr/lib/postfix/dict_mysql.so dict_mysql_open
|
||||||
|
pcre /usr/lib/postfix/dict_pcre.so dict_pcre_open
|
40
deploy/postfix-user/config/main.cf
Normal file
40
deploy/postfix-user/config/main.cf
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
|
||||||
|
|
||||||
|
|
||||||
|
# Debian specific: Specifying a file name will cause the first
|
||||||
|
# line of that file to be used as the name. The Debian default
|
||||||
|
# is /etc/mailname.
|
||||||
|
#myorigin = /etc/mailname
|
||||||
|
|
||||||
|
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
|
||||||
|
biff = no
|
||||||
|
|
||||||
|
# appending .domain is the MUA's job.
|
||||||
|
append_dot_mydomain = no
|
||||||
|
|
||||||
|
# Uncomment the next line to generate "delayed mail" warnings
|
||||||
|
#delay_warning_time = 4h
|
||||||
|
|
||||||
|
readme_directory = no
|
||||||
|
|
||||||
|
# TLS parameters
|
||||||
|
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
|
||||||
|
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
|
||||||
|
smtpd_use_tls=yes
|
||||||
|
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
|
||||||
|
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
||||||
|
|
||||||
|
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
|
||||||
|
# information on enabling SSL in the smtp client.
|
||||||
|
|
||||||
|
mailbox_size_limit = 0
|
||||||
|
recipient_delimiter = +
|
||||||
|
inet_interfaces = all
|
||||||
|
inet_protocols = all
|
||||||
|
|
||||||
|
javapipe_destination_recipient_limit = 1
|
||||||
|
virtual_mailbox_domains = hash:/etc/postfix/virtual_domains
|
||||||
|
virtual_mailbox_maps = mysql:/etc/postfix/virtual_mailbox_maps.cf
|
||||||
|
virtual_transport = javapipe
|
||||||
|
|
||||||
|
|
65
deploy/postfix-user/config/master.cf
Normal file
65
deploy/postfix-user/config/master.cf
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#
|
||||||
|
# Postfix master process configuration file. For details on the format
|
||||||
|
# of the file, see the master(5) manual page (command: "man 5 master").
|
||||||
|
#
|
||||||
|
# Do not forget to execute "postfix reload" after editing this file.
|
||||||
|
#
|
||||||
|
# ==========================================================================
|
||||||
|
# service type private unpriv chroot wakeup maxproc command + args
|
||||||
|
# (yes) (yes) (yes) (never) (100)
|
||||||
|
# ==========================================================================
|
||||||
|
smtp inet n - - - - smtpd
|
||||||
|
#smtp inet n - - - 1 postscreen
|
||||||
|
#smtpd pass - - - - - smtpd
|
||||||
|
#dnsblog unix - - - - 0 dnsblog
|
||||||
|
#tlsproxy unix - - - - 0 tlsproxy
|
||||||
|
#submission inet n - - - - smtpd
|
||||||
|
# -o syslog_name=postfix/submission
|
||||||
|
# -o smtpd_tls_security_level=encrypt
|
||||||
|
# -o smtpd_sasl_auth_enable=yes
|
||||||
|
# -o smtpd_reject_unlisted_recipient=no
|
||||||
|
# -o smtpd_client_restrictions=$mua_client_restrictions
|
||||||
|
# -o smtpd_helo_restrictions=$mua_helo_restrictions
|
||||||
|
# -o smtpd_sender_restrictions=$mua_sender_restrictions
|
||||||
|
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
|
||||||
|
# -o milter_macro_daemon_name=ORIGINATING
|
||||||
|
#smtps inet n - - - - smtpd
|
||||||
|
# -o syslog_name=postfix/smtps
|
||||||
|
# -o smtpd_tls_wrappermode=yes
|
||||||
|
# -o smtpd_sasl_auth_enable=yes
|
||||||
|
# -o smtpd_reject_unlisted_recipient=no
|
||||||
|
# -o smtpd_client_restrictions=$mua_client_restrictions
|
||||||
|
# -o smtpd_helo_restrictions=$mua_helo_restrictions
|
||||||
|
# -o smtpd_sender_restrictions=$mua_sender_restrictions
|
||||||
|
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
|
||||||
|
# -o milter_macro_daemon_name=ORIGINATING
|
||||||
|
#628 inet n - - - - qmqpd
|
||||||
|
pickup unix n - - 60 1 pickup
|
||||||
|
cleanup unix n - - - 0 cleanup
|
||||||
|
qmgr unix n - n 300 1 qmgr
|
||||||
|
#qmgr unix n - n 300 1 oqmgr
|
||||||
|
tlsmgr unix - - - 1000? 1 tlsmgr
|
||||||
|
rewrite unix - - - - - trivial-rewrite
|
||||||
|
bounce unix - - - - 0 bounce
|
||||||
|
defer unix - - - - 0 bounce
|
||||||
|
trace unix - - - - 0 bounce
|
||||||
|
verify unix - - - - 1 verify
|
||||||
|
flush unix n - - 1000? 0 flush
|
||||||
|
proxymap unix - - n - - proxymap
|
||||||
|
proxywrite unix - - n - 1 proxymap
|
||||||
|
smtp unix - - - - - smtp
|
||||||
|
#relay unix - - - - - smtp
|
||||||
|
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
|
||||||
|
showq unix n - - - - showq
|
||||||
|
error unix - - - - - error
|
||||||
|
retry unix - - - - - error
|
||||||
|
discard unix - - - - - discard
|
||||||
|
local unix - n n - - local
|
||||||
|
virtual unix - n n - - virtual
|
||||||
|
lmtp unix - - - - - lmtp
|
||||||
|
anvil unix - - - - 1 anvil
|
||||||
|
scache unix - - - - 1 scache
|
||||||
|
|
||||||
|
javapipe unix - n n - - pipe
|
||||||
|
user=postfix-user flags=DRhuX argv=java -jar /home/postfix-user/PostfixMailReceiver.jar -args $recipient
|
||||||
|
|
2
deploy/postfix-user/config/virtual_domains.pcre
Normal file
2
deploy/postfix-user/config/virtual_domains.pcre
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/^.*/ OK
|
||||||
|
|
16
deploy/postfix-user/config/virtual_mailbox_maps.cf
Normal file
16
deploy/postfix-user/config/virtual_mailbox_maps.cf
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# mysql config file for local(8) aliases(5) lookups
|
||||||
|
#
|
||||||
|
|
||||||
|
# The user name and password to log into the mysql server.
|
||||||
|
hosts = 127.0.0.1
|
||||||
|
user = postfix
|
||||||
|
password = postfix
|
||||||
|
|
||||||
|
# The database name on the servers.
|
||||||
|
dbname = postfix
|
||||||
|
|
||||||
|
# For Postfix 2.2 and later The SQL query template.
|
||||||
|
# See mysql_table(5) for details.
|
||||||
|
query = SELECT name FROM user WHERE name='%s'
|
||||||
|
|
1
deploy/postfix-user/resources/hosts
Symbolic link
1
deploy/postfix-user/resources/hosts
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../config/hosts
|
@ -0,0 +1 @@
|
|||||||
|
../../../../passwords/BucketCreate-AWS-AccessKey
|
@ -0,0 +1 @@
|
|||||||
|
../../../../passwords/BucketCreate-AWS-SecretKey
|
1
deploy/postfix-user/resources/passwords/mail
Symbolic link
1
deploy/postfix-user/resources/passwords/mail
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../passwords/mail
|
1
deploy/postfix-user/resources/passwords/mail-pbe
Symbolic link
1
deploy/postfix-user/resources/passwords/mail-pbe
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../passwords/mail-pbe
|
1
deploy/postfix-user/resources/passwords/mail_extra
Symbolic link
1
deploy/postfix-user/resources/passwords/mail_extra
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../passwords/mail_extra
|
1
deploy/postfix-user/resources/passwords/postfix
Symbolic link
1
deploy/postfix-user/resources/passwords/postfix
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../passwords/postfix
|
1
deploy/postfix-user/resources/passwords/push-certificate
Symbolic link
1
deploy/postfix-user/resources/passwords/push-certificate
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../passwords/push-certificate
|
8
deploy/postfix-user/run
Executable file
8
deploy/postfix-user/run
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
./setup
|
||||||
|
|
||||||
|
echo "----------------------------------------------" >> ../run.log
|
||||||
|
date >> ../run.log
|
||||||
|
echo "----------------------------------------------" >> ../run.log
|
||||||
|
|
||||||
|
sudo /etc/init.d/postfix start
|
||||||
|
|
6
deploy/postfix-user/setup
Executable file
6
deploy/postfix-user/setup
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
cd ~
|
||||||
|
ln -fs deploy/PostfixMailReceiver.jar
|
||||||
|
ln -fs deploy/config
|
||||||
|
ln -fs deploy/resources
|
||||||
|
|
||||||
|
cp resources/hosts/prod config/virtual_domains
|
1
deploy/postfix-user/shutdown
Executable file
1
deploy/postfix-user/shutdown
Executable file
@ -0,0 +1 @@
|
|||||||
|
sudo /etc/init.d/postfix stop
|
24
gwt/src/core/crypt/CryptorPGP.java
Normal file
24
gwt/src/core/crypt/CryptorPGP.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package core.crypt;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public abstract class CryptorPGP extends CryptorJS
|
||||||
|
{
|
||||||
|
byte[] publicKeyBytes, privateKeyBytes;
|
||||||
|
|
||||||
|
public byte[] getPublicKey ()
|
||||||
|
{
|
||||||
|
return publicKeyBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getPrivateKey ()
|
||||||
|
{
|
||||||
|
return privateKeyBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void initialize (byte[] publicKeyBytes, byte[] privateKeyBytes) throws IOException
|
||||||
|
{
|
||||||
|
this.privateKeyBytes = privateKeyBytes;
|
||||||
|
this.publicKeyBytes = publicKeyBytes;
|
||||||
|
}
|
||||||
|
}
|
58
gwt/src/core/crypt/CryptorPGPFactory.java
Normal file
58
gwt/src/core/crypt/CryptorPGPFactory.java
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package core.crypt;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import app.service.JSInvoker;
|
||||||
|
import core.callback.Callback;
|
||||||
|
import core.callback.CallbackDefault;
|
||||||
|
import core.util.Base64;
|
||||||
|
import core.util.Pair;
|
||||||
|
|
||||||
|
public class CryptorPGPFactory
|
||||||
|
{
|
||||||
|
protected native String jsGenerate(int bits, String userId, String password) /*-{
|
||||||
|
var keyPair = $wnd.pgp_genKeyPair(bits, userId, password);
|
||||||
|
var joined = keyPair.publicKey + "," + keyPair.privateKey;
|
||||||
|
return joined;
|
||||||
|
}-*/;
|
||||||
|
|
||||||
|
protected native void jsGenerate(int bits, String userId, String password, Object callback) /*-{
|
||||||
|
$wnd.mAsync.pgp_genKeyPair(
|
||||||
|
{ invoke: function(keyPair) { callback.invoke(keyPair.publicKey, keyPair.privateKey); } },
|
||||||
|
bits,
|
||||||
|
userId, password
|
||||||
|
);
|
||||||
|
}-*/;
|
||||||
|
|
||||||
|
public Pair<byte[], byte[]> generate (int bits, String userId, String password)
|
||||||
|
{
|
||||||
|
String joined = jsGenerate(bits, userId, password);
|
||||||
|
String[] split = joined.split(",");
|
||||||
|
|
||||||
|
return new Pair<byte[], byte[]>(Base64.decode(split[0]), Base64.decode(split[1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void generate (int bits, String userId, String password, Callback callback)
|
||||||
|
{
|
||||||
|
Callback synth = new CallbackDefault() {
|
||||||
|
public void onSuccess(Object... arguments) throws Exception
|
||||||
|
{
|
||||||
|
String split[] = { (String)arguments[0], (String)arguments[1] };
|
||||||
|
callback.invoke(new Pair<byte[], byte[]>(Base64.decode(split[0]), Base64.decode(split[1])));
|
||||||
|
}
|
||||||
|
}.setReturn(callback);
|
||||||
|
|
||||||
|
jsGenerate(bits, userId, password, JSInvoker.wrap(synth));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CryptorPGP fromResources(InputStream publicKey, InputStream privateKey) throws IOException {
|
||||||
|
return new CryptorPGPJS(publicKey, privateKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CryptorRSA fromString(String publicKey, Object object) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
39
gwt/src/core/crypt/CryptorPGPFactoryEnvironment.java
Normal file
39
gwt/src/core/crypt/CryptorPGPFactoryEnvironment.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package core.crypt;
|
||||||
|
|
||||||
|
import core.constants.ConstantsEnvironmentKeys;
|
||||||
|
import core.exceptions.CryptoException;
|
||||||
|
import core.util.Base64;
|
||||||
|
import core.util.Environment;
|
||||||
|
|
||||||
|
public class CryptorPGPFactoryEnvironment {
|
||||||
|
|
||||||
|
public static CryptorPGP create(Environment environment) throws CryptoException
|
||||||
|
{
|
||||||
|
return createJS(environment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CryptorPGP createJS (Environment env) throws CryptoException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String publicKeyString = env.get(ConstantsEnvironmentKeys.PGP_PUBLIC_KEY);
|
||||||
|
byte[] publicKeyBytes = null;
|
||||||
|
if (publicKeyString != null)
|
||||||
|
publicKeyBytes = Base64.decode(publicKeyString);
|
||||||
|
|
||||||
|
String privateKeyString = env.get(ConstantsEnvironmentKeys.PGP_PRIVATE_KEY);
|
||||||
|
byte[] privateKeyBytes = null;
|
||||||
|
if (privateKeyString != null)
|
||||||
|
privateKeyBytes = Base64.decode(privateKeyString);
|
||||||
|
|
||||||
|
return new CryptorPGPJS (
|
||||||
|
publicKeyBytes,
|
||||||
|
privateKeyBytes
|
||||||
|
);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new CryptoException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
87
gwt/src/core/crypt/CryptorPGPJS.java
Normal file
87
gwt/src/core/crypt/CryptorPGPJS.java
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
package core.crypt;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import app.service.JSInvoker;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.JavaScriptObject;
|
||||||
|
|
||||||
|
import core.util.Base64;
|
||||||
|
import core.util.LogNull;
|
||||||
|
import core.util.LogOut;
|
||||||
|
import core.util.Strings;
|
||||||
|
import core.callback.Callback;
|
||||||
|
import core.callback.CallbackDefault;
|
||||||
|
import core.util.Streams;
|
||||||
|
|
||||||
|
public class CryptorPGPJS extends CryptorPGP
|
||||||
|
{
|
||||||
|
static LogNull log = new LogNull(CryptorPGPJS.class);
|
||||||
|
|
||||||
|
JavaScriptObject privateKey, publicKey;
|
||||||
|
|
||||||
|
protected void initialize (byte[] publicKeyBytes, byte[] privateKeyBytes) throws IOException
|
||||||
|
{
|
||||||
|
super.initialize(publicKeyBytes, privateKeyBytes);
|
||||||
|
|
||||||
|
if (privateKeyBytes != null)
|
||||||
|
privateKey = jsGetPrivKey(Base64.encode(privateKeyBytes));
|
||||||
|
|
||||||
|
if (publicKeyBytes != null)
|
||||||
|
publicKey = jsGetPubKey(Base64.encode(publicKeyBytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
public CryptorPGPJS(InputStream pri, InputStream pub) throws IOException
|
||||||
|
{
|
||||||
|
initialize(
|
||||||
|
pub != null ? Streams.readFullyBytes(pub) : null,
|
||||||
|
pri != null ? Streams.readFullyBytes(pri) : null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CryptorPGPJS(byte[] publicKeyBytes, byte[] privateKeyBytes) throws IOException
|
||||||
|
{
|
||||||
|
initialize(publicKeyBytes, privateKeyBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
|
||||||
|
public Callback jsEncrypt_()
|
||||||
|
{
|
||||||
|
return new CallbackDefault() {
|
||||||
|
public void onSuccess(Object... arguments) throws Exception {
|
||||||
|
log.debug("jsEncrypt_",arguments[0]);
|
||||||
|
jsEncrypt(publicKey, (String)(arguments[0]), JSInvoker.wrap(callback));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public Callback jsDecrypt_()
|
||||||
|
{
|
||||||
|
return new CallbackDefault() {
|
||||||
|
public void onSuccess(Object... arguments) throws Exception {
|
||||||
|
log.debug("jsDecrypt_", arguments[0]);
|
||||||
|
jsDecrypt(privateKey, (String)(arguments[0]), JSInvoker.wrap(callback));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
|
||||||
|
public native JavaScriptObject jsGetPrivKey (String pem64) /*-{
|
||||||
|
return $wnd.mSupport.pgp_getPrivateKey(pem64);
|
||||||
|
}-*/;
|
||||||
|
|
||||||
|
public native JavaScriptObject jsGetPubKey (String pem64) /*-{
|
||||||
|
return $wnd.mSupport.pgp_getPublicKey(pem64);
|
||||||
|
}-*/;
|
||||||
|
|
||||||
|
public native void jsEncrypt(JavaScriptObject key, String bytes64, JavaScriptObject callback) /*-{
|
||||||
|
return $wnd.mAsync.pgp_encrypt(callback, key, bytes64);
|
||||||
|
}-*/;
|
||||||
|
|
||||||
|
public native void jsDecrypt(JavaScriptObject key, String bytes64, JavaScriptObject callback) /*-{
|
||||||
|
return $wnd.mAsync.pgp_decrypt(callback, key, bytes64);
|
||||||
|
}-*/;
|
||||||
|
}
|
12
gwt/src/core/util/HttpDelegateFactory.java
Normal file
12
gwt/src/core/util/HttpDelegateFactory.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package core.util;
|
||||||
|
|
||||||
|
import app.service.JSHttpDelegate;
|
||||||
|
import app.service.Main;
|
||||||
|
|
||||||
|
public class HttpDelegateFactory
|
||||||
|
{
|
||||||
|
static HttpDelegate create ()
|
||||||
|
{
|
||||||
|
return new JSHttpDelegate(Main.delegate);
|
||||||
|
}
|
||||||
|
}
|
@ -125,7 +125,7 @@ public class Zip
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return new CallbackSync<byte[]>(inflate_()).export();
|
return new CallbackSync(inflate_()).<byte[]>export();
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
|
@ -2,6 +2,7 @@ set -x
|
|||||||
|
|
||||||
./create-server-account-user.remote web
|
./create-server-account-user.remote web
|
||||||
./create-server-account-user.remote james
|
./create-server-account-user.remote james
|
||||||
|
./create-server-account-user.remote postfix-user
|
||||||
./create-server-account-user.remote mail-user
|
./create-server-account-user.remote mail-user
|
||||||
./create-server-account-user.remote mail-key
|
./create-server-account-user.remote mail-key
|
||||||
./create-server-account-user.remote tomcat
|
./create-server-account-user.remote tomcat
|
||||||
|
@ -4,5 +4,5 @@ M_ROOT=`cat requirements/server_root_account`
|
|||||||
M_HOST=$1
|
M_HOST=$1
|
||||||
|
|
||||||
scp setup-java.remote $M_ROOT@$M_HOST:
|
scp setup-java.remote $M_ROOT@$M_HOST:
|
||||||
ssh $M_ROOT@$M_HOST ./setup-java.remote
|
ssh $M_ROOT@$M_HOST sudo ./setup-java.remote
|
||||||
|
|
||||||
|
@ -2,10 +2,14 @@
|
|||||||
# because icetea has errors. After spending near 30 hours trying to negotiate icetea screw ups
|
# because icetea has errors. After spending near 30 hours trying to negotiate icetea screw ups
|
||||||
# I realized: why bother?
|
# I realized: why bother?
|
||||||
|
|
||||||
sudo add-apt-repository ppa:webupd8team/java --yes
|
add-apt-repository ppa:webupd8team/java --yes
|
||||||
sudo apt-get update
|
apt-get update
|
||||||
#sudo apt-get install oracle-java7-installer --yes
|
|
||||||
sudo apt-get install oracle-java6-installer --yes
|
echo "yes
|
||||||
|
yes" | apt-get install oracle-java7-installer --yes
|
||||||
|
|
||||||
|
#echo "yes
|
||||||
|
#yes" | apt-get install oracle-java6-installer --yes
|
||||||
|
|
||||||
echo "Check the version after running this script, if it is not sun java then"
|
echo "Check the version after running this script, if it is not sun java then"
|
||||||
echo "read this: http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html"
|
echo "read this: http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html"
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
set -x
|
set -x
|
||||||
|
|
||||||
sudo apt-get install mysql-server --yes
|
echo "
|
||||||
|
|
||||||
|
" | sudo apt-get install mysql-server --yes
|
||||||
|
|
||||||
mysql -u root < setup-mysql.sql
|
mysql -u root < setup-mysql.sql
|
||||||
rm setup-mysql.sql
|
rm setup-mysql.sql
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
CREATE DATABASE mail DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
|
CREATE DATABASE mail DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
|
||||||
CREATE DATABASE mail_extra DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
|
CREATE DATABASE mail_extra DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
|
||||||
CREATE DATABASE captcha DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
|
CREATE DATABASE captcha DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
|
||||||
|
CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
|
||||||
CREATE DATABASE james CHARACTER SET utf8;
|
CREATE DATABASE james CHARACTER SET utf8;
|
||||||
|
|
||||||
CREATE USER 'mail'@'localhost' IDENTIFIED BY 'MAIL_PASSWORD';
|
CREATE USER 'mail'@'localhost' IDENTIFIED BY 'MAIL_PASSWORD';
|
||||||
CREATE USER 'mail_extra'@'localhost' IDENTIFIED BY 'MAIL_EXTRA_PASSWORD';
|
CREATE USER 'mail_extra'@'localhost' IDENTIFIED BY 'MAIL_EXTRA_PASSWORD';
|
||||||
CREATE USER 'captcha'@'localhost' IDENTIFIED BY 'CAPTCHA_PASSWORD';
|
CREATE USER 'captcha'@'localhost' IDENTIFIED BY 'CAPTCHA_PASSWORD';
|
||||||
CREATE USER 'james'@'localhost' IDENTIFIED BY 'JAMES_PASSWORD';
|
CREATE USER 'james'@'localhost' IDENTIFIED BY 'JAMES_PASSWORD';
|
||||||
|
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfix';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost';
|
GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost';
|
||||||
GRANT ALL PRIVILEGES ON mail_extra.* TO 'mail_extra'@'localhost';
|
GRANT ALL PRIVILEGES ON mail_extra.* TO 'mail_extra'@'localhost';
|
||||||
GRANT ALL PRIVILEGES ON captcha.* TO 'captcha'@'localhost';
|
GRANT ALL PRIVILEGES ON captcha.* TO 'captcha'@'localhost';
|
||||||
GRANT ALL PRIVILEGES ON james.* TO 'james'@'localhost';
|
GRANT ALL PRIVILEGES ON james.* TO 'james'@'localhost';
|
||||||
|
GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'localhost';
|
||||||
|
9
install/setup-postfix
Executable file
9
install/setup-postfix
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
set -x
|
||||||
|
|
||||||
|
M_HOST=$1
|
||||||
|
M_ROOT=`cat requirements/server_root_account`
|
||||||
|
|
||||||
|
scp sudoers.d-postfix-user $M_ROOT@$M_HOST:
|
||||||
|
scp setup-postfix.remote $M_ROOT@$M_HOST:
|
||||||
|
ssh $M_ROOT@$M_HOST sudo ./setup-postfix.remote
|
||||||
|
|
17
install/setup-postfix.remote
Executable file
17
install/setup-postfix.remote
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
set -x
|
||||||
|
|
||||||
|
echo "1" | apt-get install postfix postfix-mysql postfix-pcre --yes
|
||||||
|
|
||||||
|
cp sudoers.d-postfix-user /etc/sudoers.d/postfix-user
|
||||||
|
chmod 0440 /etc/sudoers.d/postfix-user
|
||||||
|
|
||||||
|
cd /etc/postfix
|
||||||
|
rm main.cf
|
||||||
|
rm master.cf
|
||||||
|
|
||||||
|
ln -fs /home/postfix-user/config/main.cf
|
||||||
|
ln -fs /home/postfix-user/config/master.cf
|
||||||
|
#ln -fs /home/postfix-user/config/virtual_domains.pcre
|
||||||
|
ln -fs /home/postfix-user/config/virtual_domains
|
||||||
|
ln -fs /home/postfix-user/config/virtual_mailbox_maps.cf
|
||||||
|
|
@ -7,7 +7,8 @@ M_HOST=$1
|
|||||||
./create-server-accounts $M_HOST
|
./create-server-accounts $M_HOST
|
||||||
|
|
||||||
./setup-utils $M_HOST
|
./setup-utils $M_HOST
|
||||||
./setup-james $M_HOST
|
#./setup-james $M_HOST
|
||||||
|
./setup-postfix $M_HOST
|
||||||
./setup-java $M_HOST
|
./setup-java $M_HOST
|
||||||
./setup-mysql $M_HOST
|
./setup-mysql $M_HOST
|
||||||
./setup-tomcat $M_HOST
|
./setup-tomcat $M_HOST
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
set -x
|
set -x
|
||||||
|
|
||||||
sudo ./setup-nginx.remote
|
./setup-nginx.remote
|
||||||
|
|
||||||
sudo mkdir -p /var/log/nginx
|
mkdir -p /var/log/nginx
|
||||||
chdown nginx /var/log/nginx
|
chdown nginx /var/log/nginx
|
||||||
|
|
||||||
cp sudoers.d-web /etc/sudoers.d/web
|
cp sudoers.d-web /etc/sudoers.d/web
|
||||||
|
1
install/sudoers.d-postfix-user
Normal file
1
install/sudoers.d-postfix-user
Normal file
@ -0,0 +1 @@
|
|||||||
|
postfix-user ALL = (root) NOPASSWD :/etc/init.d/postfix stop,/etc/init.d/postfix start
|
@ -28,6 +28,7 @@ import core.constants.ConstantsEnvironmentKeys;
|
|||||||
import core.constants.ConstantsClient;
|
import core.constants.ConstantsClient;
|
||||||
import core.constants.ConstantsStorage;
|
import core.constants.ConstantsStorage;
|
||||||
import core.constants.ConstantsVersion;
|
import core.constants.ConstantsVersion;
|
||||||
|
import core.crypt.CryptorPGPFactory;
|
||||||
import core.crypt.CryptorRSAFactory;
|
import core.crypt.CryptorRSAFactory;
|
||||||
import core.crypt.KeyPairFromPassword;
|
import core.crypt.KeyPairFromPassword;
|
||||||
import core.io.IoChain;
|
import core.io.IoChain;
|
||||||
@ -145,8 +146,11 @@ public class JSSignUp implements Exportable, SRPClientListener
|
|||||||
String awsReadWriteAccessKey, awsReadWriteSecretKey;
|
String awsReadWriteAccessKey, awsReadWriteSecretKey;
|
||||||
|
|
||||||
String smtpPassword;
|
String smtpPassword;
|
||||||
byte[] publicKey;
|
byte[] rsaPublicKey;
|
||||||
byte[] privateKey;
|
byte[] rsaPrivateKey;
|
||||||
|
|
||||||
|
byte[] pgpPublicKey;
|
||||||
|
byte[] pgpPrivateKey;
|
||||||
|
|
||||||
String stripeCardNumber, stripeCardExpMonth, stripeCardExpYear, stripeCardCVC;
|
String stripeCardNumber, stripeCardExpMonth, stripeCardExpYear, stripeCardCVC;
|
||||||
String stripeTransactionID;
|
String stripeTransactionID;
|
||||||
@ -209,8 +213,25 @@ public class JSSignUp implements Exportable, SRPClientListener
|
|||||||
public void onSuccess(Object... arguments) throws Exception {
|
public void onSuccess(Object... arguments) throws Exception {
|
||||||
Pair<byte[], byte[]> pair = (Pair<byte[], byte[]>)arguments[0];
|
Pair<byte[], byte[]> pair = (Pair<byte[], byte[]>)arguments[0];
|
||||||
|
|
||||||
publicKey = pair.first;
|
rsaPublicKey = pair.first;
|
||||||
privateKey = pair.second;
|
rsaPrivateKey = pair.second;
|
||||||
|
|
||||||
|
callback.invoke();
|
||||||
|
}
|
||||||
|
}.setReturn(callback)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void calculatePGP (Callback callback) throws NoSuchAlgorithmException
|
||||||
|
{
|
||||||
|
new CryptorPGPFactory().generate(2048, name, password, new CallbackDefault() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(Object... arguments) throws Exception {
|
||||||
|
Pair<byte[], byte[]> pair = (Pair<byte[], byte[]>)arguments[0];
|
||||||
|
|
||||||
|
pgpPublicKey = pair.first;
|
||||||
|
pgpPrivateKey = pair.second;
|
||||||
|
|
||||||
callback.invoke();
|
callback.invoke();
|
||||||
}
|
}
|
||||||
@ -234,7 +255,11 @@ public class JSSignUp implements Exportable, SRPClientListener
|
|||||||
serverEnvironment.put(prefix + ConstantsDropbox.DropboxTokenSecret, dropboxUserSecret);
|
serverEnvironment.put(prefix + ConstantsDropbox.DropboxTokenSecret, dropboxUserSecret);
|
||||||
serverEnvironment.put(
|
serverEnvironment.put(
|
||||||
ConstantsEnvironmentKeys.PUBLIC_ENCRYPTION_KEY,
|
ConstantsEnvironmentKeys.PUBLIC_ENCRYPTION_KEY,
|
||||||
Base64.encode(publicKey)
|
Base64.encode(rsaPublicKey)
|
||||||
|
);
|
||||||
|
serverEnvironment.put(
|
||||||
|
ConstantsEnvironmentKeys.PGP_PUBLIC_KEY,
|
||||||
|
Base64.encode(pgpPublicKey)
|
||||||
);
|
);
|
||||||
|
|
||||||
clientEnvironment = new Environment();
|
clientEnvironment = new Environment();
|
||||||
@ -248,12 +273,20 @@ public class JSSignUp implements Exportable, SRPClientListener
|
|||||||
clientEnvironment.put(prefix + ConstantsDropbox.DropboxTokenSecret, dropboxUserSecret);
|
clientEnvironment.put(prefix + ConstantsDropbox.DropboxTokenSecret, dropboxUserSecret);
|
||||||
clientEnvironment.put(
|
clientEnvironment.put(
|
||||||
ConstantsEnvironmentKeys.PUBLIC_ENCRYPTION_KEY,
|
ConstantsEnvironmentKeys.PUBLIC_ENCRYPTION_KEY,
|
||||||
Base64.encode(publicKey)
|
Base64.encode(rsaPublicKey)
|
||||||
);
|
);
|
||||||
clientEnvironment.put(
|
clientEnvironment.put(
|
||||||
ConstantsEnvironmentKeys.PRIVATE_DECRYPTION_KEY,
|
ConstantsEnvironmentKeys.PRIVATE_DECRYPTION_KEY,
|
||||||
Base64.encode(privateKey)
|
Base64.encode(rsaPrivateKey)
|
||||||
);
|
);
|
||||||
|
clientEnvironment.put(
|
||||||
|
ConstantsEnvironmentKeys.PGP_PUBLIC_KEY,
|
||||||
|
Base64.encode(pgpPublicKey)
|
||||||
|
);
|
||||||
|
clientEnvironment.put(
|
||||||
|
ConstantsEnvironmentKeys.PGP_PRIVATE_KEY,
|
||||||
|
Base64.encode(pgpPrivateKey)
|
||||||
|
);
|
||||||
|
|
||||||
completeEnvironment = new Environment();
|
completeEnvironment = new Environment();
|
||||||
completeEnvironment.put(ConstantsEnvironmentKeys.CONFIGURATION_VERSION, ConstantsVersion.CONFIGURATION);
|
completeEnvironment.put(ConstantsEnvironmentKeys.CONFIGURATION_VERSION, ConstantsVersion.CONFIGURATION);
|
||||||
@ -276,7 +309,11 @@ public class JSSignUp implements Exportable, SRPClientListener
|
|||||||
serverEnvironment.put(prefix + ConstantsS3.AWSBucketRegion, awsBucketRegion);
|
serverEnvironment.put(prefix + ConstantsS3.AWSBucketRegion, awsBucketRegion);
|
||||||
serverEnvironment.put(
|
serverEnvironment.put(
|
||||||
ConstantsEnvironmentKeys.PUBLIC_ENCRYPTION_KEY,
|
ConstantsEnvironmentKeys.PUBLIC_ENCRYPTION_KEY,
|
||||||
Base64.encode(publicKey)
|
Base64.encode(rsaPublicKey)
|
||||||
|
);
|
||||||
|
serverEnvironment.put(
|
||||||
|
ConstantsEnvironmentKeys.PGP_PUBLIC_KEY,
|
||||||
|
Base64.encode(pgpPublicKey)
|
||||||
);
|
);
|
||||||
|
|
||||||
clientEnvironment = new Environment();
|
clientEnvironment = new Environment();
|
||||||
@ -289,12 +326,20 @@ public class JSSignUp implements Exportable, SRPClientListener
|
|||||||
clientEnvironment.put(prefix + ConstantsS3.AWSBucketRegion, awsBucketRegion);
|
clientEnvironment.put(prefix + ConstantsS3.AWSBucketRegion, awsBucketRegion);
|
||||||
clientEnvironment.put(
|
clientEnvironment.put(
|
||||||
ConstantsEnvironmentKeys.PUBLIC_ENCRYPTION_KEY,
|
ConstantsEnvironmentKeys.PUBLIC_ENCRYPTION_KEY,
|
||||||
Base64.encode(publicKey)
|
Base64.encode(rsaPublicKey)
|
||||||
);
|
);
|
||||||
clientEnvironment.put(
|
clientEnvironment.put(
|
||||||
ConstantsEnvironmentKeys.PRIVATE_DECRYPTION_KEY,
|
ConstantsEnvironmentKeys.PRIVATE_DECRYPTION_KEY,
|
||||||
Base64.encode(privateKey)
|
Base64.encode(rsaPrivateKey)
|
||||||
);
|
);
|
||||||
|
clientEnvironment.put(
|
||||||
|
ConstantsEnvironmentKeys.PGP_PUBLIC_KEY,
|
||||||
|
Base64.encode(pgpPublicKey)
|
||||||
|
);
|
||||||
|
clientEnvironment.put(
|
||||||
|
ConstantsEnvironmentKeys.PGP_PRIVATE_KEY,
|
||||||
|
Base64.encode(pgpPrivateKey)
|
||||||
|
);
|
||||||
|
|
||||||
completeEnvironment = new Environment();
|
completeEnvironment = new Environment();
|
||||||
completeEnvironment.put(ConstantsEnvironmentKeys.CONFIGURATION_VERSION, ConstantsVersion.CONFIGURATION);
|
completeEnvironment.put(ConstantsEnvironmentKeys.CONFIGURATION_VERSION, ConstantsVersion.CONFIGURATION);
|
||||||
@ -345,6 +390,16 @@ public class JSSignUp implements Exportable, SRPClientListener
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
signUpChain.addCallback(new CallbackDefault(info) {
|
||||||
|
public void onSuccess(Object... arguments) throws Exception {
|
||||||
|
log.debug("signUp_step_createPGP");
|
||||||
|
|
||||||
|
SignUpInfo info = (SignUpInfo)V(0);
|
||||||
|
JSInvoker.invoke(info.callback.getCallback(), "progress", new Object[] { "Creating PGP key pair." });
|
||||||
|
info.calculatePGP(callback);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
signUpChain.addCallback(new CallbackDefault(info) {
|
signUpChain.addCallback(new CallbackDefault(info) {
|
||||||
public void onSuccess(Object... arguments) throws Exception {
|
public void onSuccess(Object... arguments) throws Exception {
|
||||||
log.debug("signUp_step_genKeyPair");
|
log.debug("signUp_step_genKeyPair");
|
||||||
|
@ -38,7 +38,7 @@ public class Main extends JSApplet implements Exportable, SRPClientListener
|
|||||||
|
|
||||||
static String VERSION_STRING = "M";
|
static String VERSION_STRING = "M";
|
||||||
|
|
||||||
Object delegate;
|
public static Object delegate;
|
||||||
JSEventPropagator eventPropagator;
|
JSEventPropagator eventPropagator;
|
||||||
|
|
||||||
public Main ()
|
public Main ()
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<property name="Mailiverse.App.Tools.location" value="../app/tools"/>
|
<property name="Mailiverse.App.Tools.location" value="../app/tools"/>
|
||||||
<property name="ECLIPSE_HOME" value="../../../../Desktop/eclipse"/>
|
<property name="ECLIPSE_HOME" value="../../../../Desktop/eclipse"/>
|
||||||
<property name="Mailiverse.Ext.Apache.location" value="../ext/apache"/>
|
<property name="Mailiverse.Ext.Apache.location" value="../ext/apache"/>
|
||||||
<property name="Mailiverse.Ext.BouncyCastle.location" value="../ext/lcrypto-jdk15on-148"/>
|
<property name="Mailiverse.Ext.BouncyCastle.location" value="../ext/bouncycastle"/>
|
||||||
<property name="Mailiverse.Ext.JordanZimmerman.location" value="../ext/jordanzimmerman"/>
|
<property name="Mailiverse.Ext.JordanZimmerman.location" value="../ext/jordanzimmerman"/>
|
||||||
<property name="Mailiverse.Ext.Json.location" value="../ext/json"/>
|
<property name="Mailiverse.Ext.Json.location" value="../ext/json"/>
|
||||||
<property name="debuglevel" value="source,lines,vars"/>
|
<property name="debuglevel" value="source,lines,vars"/>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
package core.callback;
|
package core.callback;
|
||||||
|
|
||||||
|
|
||||||
public class CallbackSync<T>
|
public class CallbackSync
|
||||||
{
|
{
|
||||||
CallbackChain chain;
|
CallbackChain chain;
|
||||||
Object[] results;
|
Object[] results;
|
||||||
@ -16,7 +16,7 @@ public class CallbackSync<T>
|
|||||||
chain = callback.addCallback(setResults_());
|
chain = callback.addCallback(setResults_());
|
||||||
}
|
}
|
||||||
|
|
||||||
public CallbackSync<T> invoke (Object...args)
|
public CallbackSync invoke (Object...args)
|
||||||
{
|
{
|
||||||
chain.invoke(args);
|
chain.invoke(args);
|
||||||
return this;
|
return this;
|
||||||
@ -31,7 +31,7 @@ public class CallbackSync<T>
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public T exportNoException ()
|
public <T> T exportNoException ()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -47,7 +47,7 @@ public class CallbackSync<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public T export() throws Exception
|
public <T> T export() throws Exception
|
||||||
{
|
{
|
||||||
if (results != null && results.length > 0)
|
if (results != null && results.length > 0)
|
||||||
{
|
{
|
||||||
@ -62,4 +62,21 @@ public class CallbackSync<T>
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T> T export(int i) throws Exception
|
||||||
|
{
|
||||||
|
if (results != null && results.length > i)
|
||||||
|
{
|
||||||
|
if (results[0] instanceof Exception)
|
||||||
|
{
|
||||||
|
Exception e = (Exception)results[0];
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (T)results[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -13,4 +13,7 @@ public class ConstantsEnvironmentKeys
|
|||||||
public static final String VERSION = "version";
|
public static final String VERSION = "version";
|
||||||
public static final String CLIENT_ENVIRONMENT = "client";
|
public static final String CLIENT_ENVIRONMENT = "client";
|
||||||
public static final String SERVER_ENVIRONMENT = "server";
|
public static final String SERVER_ENVIRONMENT = "server";
|
||||||
|
|
||||||
|
public static final String PGP_PUBLIC_KEY = "PGP-PublicKey";
|
||||||
|
public static final String PGP_PRIVATE_KEY = "PGP-PrivateKey";
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ public class ConstantsServer
|
|||||||
public static final String LOCAL_MAIL_SERVER, DBCONNECTION_PREFIX;
|
public static final String LOCAL_MAIL_SERVER, DBCONNECTION_PREFIX;
|
||||||
public static final String KEY_SERVER;
|
public static final String KEY_SERVER;
|
||||||
public static final String LOCAL_SMTP_HOST;
|
public static final String LOCAL_SMTP_HOST;
|
||||||
|
public static final String AT_HOST;
|
||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
@ -20,6 +21,7 @@ public class ConstantsServer
|
|||||||
DBCONNECTION_PREFIX = "jdbc:mysql://" + Hosts.getHostFor("local_db_dev") + "/";
|
DBCONNECTION_PREFIX = "jdbc:mysql://" + Hosts.getHostFor("local_db_dev") + "/";
|
||||||
KEY_SERVER = Hosts.getHostFor("local_key_dev");
|
KEY_SERVER = Hosts.getHostFor("local_key_dev");
|
||||||
LOCAL_SMTP_HOST = Hosts.getHostFor("local_smtp_dev");
|
LOCAL_SMTP_HOST = Hosts.getHostFor("local_smtp_dev");
|
||||||
|
AT_HOST = "@" + Hosts.getHostFor("dev");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -31,6 +33,7 @@ public class ConstantsServer
|
|||||||
LOCAL_MAIL_SERVER = Hosts.getHostFor("local_mail_prod");
|
LOCAL_MAIL_SERVER = Hosts.getHostFor("local_mail_prod");
|
||||||
DBCONNECTION_PREFIX = "jdbc:mysql://" + Hosts.getHostFor("local_db_prod") + "/";
|
DBCONNECTION_PREFIX = "jdbc:mysql://" + Hosts.getHostFor("local_db_prod") + "/";
|
||||||
LOCAL_SMTP_HOST = Hosts.getHostFor("local_smtp_prod");
|
LOCAL_SMTP_HOST = Hosts.getHostFor("local_smtp_prod");
|
||||||
|
AT_HOST = "@" + Hosts.getHostFor("prod");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ public class CryptorRSAAES extends Cryptor
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return new CallbackSync<byte[]>(encrypt_()).invoke(bytes).export();
|
return new CallbackSync(encrypt_()).invoke(bytes).export();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@ -206,7 +206,7 @@ public class CryptorRSAAES extends Cryptor
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return new CallbackSync<byte[]>(decrypt_()).invoke(bytes).export();
|
return new CallbackSync(decrypt_()).invoke(bytes).export();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -32,8 +32,8 @@ public class CryptorRSABC extends CryptorRSA
|
|||||||
|
|
||||||
public final int MAX_RSA_BLOCK_SIZE = 117;
|
public final int MAX_RSA_BLOCK_SIZE = 117;
|
||||||
|
|
||||||
RSAPublicKey publicKey;
|
public RSAPublicKey publicKey;
|
||||||
RSAPrivateKey privateKey;
|
public RSAPrivateKey privateKey;
|
||||||
|
|
||||||
public static final byte[] iv = Arrays.generate(16, 0);
|
public static final byte[] iv = Arrays.generate(16, 0);
|
||||||
|
|
||||||
|
332
java/core/src/core/crypt/PgpEncryption.java.no
Normal file
332
java/core/src/core/crypt/PgpEncryption.java.no
Normal file
@ -0,0 +1,332 @@
|
|||||||
|
package core.crypt;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.security.NoSuchProviderException;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.bc.bcpg.ArmoredOutputStream;
|
||||||
|
import org.bc.crypto.params.AsymmetricKeyParameter;
|
||||||
|
import org.bc.crypto.util.PrivateKeyFactory;
|
||||||
|
import org.bc.crypto.util.PublicKeyFactory;
|
||||||
|
import org.bc.openpgp.PGPCompressedData;
|
||||||
|
import org.bc.openpgp.PGPCompressedDataGenerator;
|
||||||
|
import org.bc.openpgp.PGPEncryptedData;
|
||||||
|
import org.bc.openpgp.PGPEncryptedDataGenerator;
|
||||||
|
import org.bc.openpgp.PGPEncryptedDataList;
|
||||||
|
import org.bc.openpgp.PGPException;
|
||||||
|
import org.bc.openpgp.PGPLiteralData;
|
||||||
|
import org.bc.openpgp.PGPLiteralDataGenerator;
|
||||||
|
import org.bc.openpgp.PGPObjectFactory;
|
||||||
|
import org.bc.openpgp.PGPPrivateKey;
|
||||||
|
import org.bc.openpgp.PGPPublicKey;
|
||||||
|
import org.bc.openpgp.PGPPublicKeyEncryptedData;
|
||||||
|
import org.bc.openpgp.PGPUtil;
|
||||||
|
import org.bc.openpgp.operator.KeyFingerPrintCalculator;
|
||||||
|
import org.bc.openpgp.operator.bc.BcPGPDataEncryptorBuilder;
|
||||||
|
import org.bc.openpgp.operator.bc.BcPGPKeyConverter;
|
||||||
|
import org.bc.openpgp.operator.bc.BcPublicKeyDataDecryptorFactory;
|
||||||
|
import org.bc.openpgp.operator.bc.BcPublicKeyKeyEncryptionMethodGenerator;
|
||||||
|
|
||||||
|
import core.util.Pair;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple routine to encrypt and decrypt using a Public and Private key with passphrase. This service
|
||||||
|
* routine provides the basic PGP services between byte arrays.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PgpEncryption {
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
private static PGPPrivateKey findSecretKey(
|
||||||
|
PGPSecretKeyRingCollection pgpSec, long keyID, char[] pass)
|
||||||
|
throws PGPException, NoSuchProviderException {
|
||||||
|
PGPSecretKey pgpSecKey = pgpSec.getSecretKey(keyID);
|
||||||
|
|
||||||
|
if (pgpSecKey == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pgpSecKey.extractPrivateKey(pass, "BC");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static boolean isCorrectPublicKey (
|
||||||
|
PGPPrivateKey sKey, long keyID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return sKey.getKeyID() == keyID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* decrypt the passed in message stream
|
||||||
|
*
|
||||||
|
* @param encrypted
|
||||||
|
* The message to be decrypted.
|
||||||
|
* @param passPhrase
|
||||||
|
* Pass phrase (key)
|
||||||
|
*
|
||||||
|
* @return Clear text as a byte array. I18N considerations are not handled
|
||||||
|
* by this routine
|
||||||
|
* @exception IOException
|
||||||
|
* @exception PGPException
|
||||||
|
* @exception NoSuchProviderException
|
||||||
|
*/
|
||||||
|
public static byte[] decrypt(byte[] encrypted, PGPPrivateKey sKey)
|
||||||
|
throws IOException, PGPException, NoSuchProviderException {
|
||||||
|
|
||||||
|
KeyFingerPrintCalculator keyFingerPrintCalculator = null;
|
||||||
|
|
||||||
|
InputStream in = new ByteArrayInputStream(encrypted);
|
||||||
|
|
||||||
|
in = PGPUtil.getDecoderStream(in);
|
||||||
|
|
||||||
|
PGPObjectFactory pgpF = new PGPObjectFactory(in, keyFingerPrintCalculator);
|
||||||
|
PGPEncryptedDataList enc = null;
|
||||||
|
Object o = pgpF.nextObject();
|
||||||
|
|
||||||
|
//
|
||||||
|
// the first object might be a PGP marker packet.
|
||||||
|
//
|
||||||
|
if (o instanceof PGPEncryptedDataList) {
|
||||||
|
enc = (PGPEncryptedDataList) o;
|
||||||
|
} else {
|
||||||
|
enc = (PGPEncryptedDataList) pgpF.nextObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// find the secret key
|
||||||
|
//
|
||||||
|
Iterator it = enc.getEncryptedDataObjects();
|
||||||
|
// PGPPrivateKey sKey = null;
|
||||||
|
PGPPublicKeyEncryptedData pbe = null;
|
||||||
|
// PGPSecretKeyRingCollection pgpSec = new PGPSecretKeyRingCollection(
|
||||||
|
// PGPUtil.getDecoderStream(keyIn));
|
||||||
|
|
||||||
|
while (it.hasNext()) {
|
||||||
|
pbe = (PGPPublicKeyEncryptedData) it.next();
|
||||||
|
|
||||||
|
if (isCorrectPublicKey(sKey, pbe.getKeyID()))
|
||||||
|
break;
|
||||||
|
// sKey = findSecretKey(pgpSec, pbe.getKeyID(), password);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isCorrectPublicKey(sKey, pbe.getKeyID())) {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"secret key for message not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
InputStream clear = pbe.getDataStream(new BcPublicKeyDataDecryptorFactory(sKey));
|
||||||
|
|
||||||
|
PGPObjectFactory pgpFact = new PGPObjectFactory(clear, keyFingerPrintCalculator);
|
||||||
|
|
||||||
|
PGPCompressedData cData = (PGPCompressedData) pgpFact.nextObject();
|
||||||
|
|
||||||
|
pgpFact = new PGPObjectFactory(cData.getDataStream(), keyFingerPrintCalculator);
|
||||||
|
|
||||||
|
PGPLiteralData ld = (PGPLiteralData) pgpFact.nextObject();
|
||||||
|
|
||||||
|
InputStream unc = ld.getInputStream();
|
||||||
|
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
int ch;
|
||||||
|
|
||||||
|
while ((ch = unc.read()) >= 0) {
|
||||||
|
out.write(ch);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] returnBytes = out.toByteArray();
|
||||||
|
out.close();
|
||||||
|
return returnBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple PGP encryptor between byte[].
|
||||||
|
*
|
||||||
|
* @param clearData
|
||||||
|
* The test to be encrypted
|
||||||
|
* @param passPhrase
|
||||||
|
* The pass phrase (key). This method assumes that the key is a
|
||||||
|
* simple pass phrase, and does not yet support RSA or more
|
||||||
|
* sophisiticated keying.
|
||||||
|
* @param fileName
|
||||||
|
* File name. This is used in the Literal Data Packet (tag 11)
|
||||||
|
* which is really inly important if the data is to be related to
|
||||||
|
* a file to be recovered later. Because this routine does not
|
||||||
|
* know the source of the information, the caller can set
|
||||||
|
* something here for file name use that will be carried. If this
|
||||||
|
* routine is being used to encrypt SOAP MIME bodies, for
|
||||||
|
* example, use the file name from the MIME type, if applicable.
|
||||||
|
* Or anything else appropriate.
|
||||||
|
*
|
||||||
|
* @param armor
|
||||||
|
*
|
||||||
|
* @return encrypted data.
|
||||||
|
* @exception IOException
|
||||||
|
* @exception PGPException
|
||||||
|
* @exception NoSuchProviderException
|
||||||
|
*/
|
||||||
|
public static byte[] encrypt(byte[] clearData, PGPPublicKey encKey,
|
||||||
|
String fileName,boolean withIntegrityCheck, boolean armor)
|
||||||
|
throws IOException, PGPException, NoSuchProviderException {
|
||||||
|
if (fileName == null) {
|
||||||
|
fileName = PGPLiteralData.CONSOLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteArrayOutputStream encOut = new ByteArrayOutputStream();
|
||||||
|
|
||||||
|
OutputStream out = encOut;
|
||||||
|
if (armor) {
|
||||||
|
out = new ArmoredOutputStream(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
|
||||||
|
|
||||||
|
PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator(
|
||||||
|
PGPCompressedDataGenerator.ZIP);
|
||||||
|
OutputStream cos = comData.open(bOut); // open it with the final
|
||||||
|
// destination
|
||||||
|
PGPLiteralDataGenerator lData = new PGPLiteralDataGenerator();
|
||||||
|
|
||||||
|
// we want to generate compressed data. This might be a user option
|
||||||
|
// later,
|
||||||
|
// in which case we would pass in bOut.
|
||||||
|
OutputStream pOut = lData.open(cos, // the compressed output stream
|
||||||
|
PGPLiteralData.BINARY, fileName, // "filename" to store
|
||||||
|
clearData.length, // length of clear data
|
||||||
|
new Date() // current time
|
||||||
|
);
|
||||||
|
pOut.write(clearData);
|
||||||
|
|
||||||
|
lData.close();
|
||||||
|
comData.close();
|
||||||
|
|
||||||
|
PGPEncryptedDataGenerator cPk = new PGPEncryptedDataGenerator(
|
||||||
|
new BcPGPDataEncryptorBuilder(PGPEncryptedData.CAST5)
|
||||||
|
);
|
||||||
|
|
||||||
|
cPk.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(encKey));
|
||||||
|
|
||||||
|
byte[] bytes = bOut.toByteArray();
|
||||||
|
|
||||||
|
OutputStream cOut = cPk.open(out, bytes.length);
|
||||||
|
|
||||||
|
cOut.write(bytes); // obtain the actual bytes from the compressed stream
|
||||||
|
|
||||||
|
cOut.close();
|
||||||
|
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
return encOut.toByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
private static PGPPublicKey readPublicKey(InputStream in)
|
||||||
|
throws IOException, PGPException {
|
||||||
|
in = PGPUtil.getDecoderStream(in);
|
||||||
|
|
||||||
|
PGPPublicKeyRingCollection pgpPub = new PGPPublicKeyRingCollection(in);
|
||||||
|
|
||||||
|
//
|
||||||
|
// we just loop through the collection till we find a key suitable for
|
||||||
|
// encryption, in the real
|
||||||
|
// world you would probably want to be a bit smarter about this.
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// iterate through the key rings.
|
||||||
|
//
|
||||||
|
Iterator rIt = pgpPub.getKeyRings();
|
||||||
|
|
||||||
|
while (rIt.hasNext()) {
|
||||||
|
PGPPublicKeyRing kRing = (PGPPublicKeyRing) rIt.next();
|
||||||
|
Iterator kIt = kRing.getPublicKeys();
|
||||||
|
|
||||||
|
while (kIt.hasNext()) {
|
||||||
|
PGPPublicKey k = (PGPPublicKey) kIt.next();
|
||||||
|
|
||||||
|
if (k.isEncryptionKey()) {
|
||||||
|
return k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Can't find encryption key in key ring.");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
private static PGPPublicKey readPublicKey(InputStream in)
|
||||||
|
throws IOException, PGPException {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
public static byte[] getBytesFromFile(File file) throws IOException {
|
||||||
|
InputStream is = new FileInputStream(file);
|
||||||
|
|
||||||
|
// Get the size of the file
|
||||||
|
long length = file.length();
|
||||||
|
|
||||||
|
if (length > Integer.MAX_VALUE) {
|
||||||
|
// File is too large
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the byte array to hold the data
|
||||||
|
byte[] bytes = new byte[(int)length];
|
||||||
|
|
||||||
|
// Read in the bytes
|
||||||
|
int offset = 0;
|
||||||
|
int numRead = 0;
|
||||||
|
while (offset < bytes.length
|
||||||
|
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
|
||||||
|
offset += numRead;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure all the bytes have been read in
|
||||||
|
if (offset < bytes.length) {
|
||||||
|
throw new IOException("Could not completely read file "+file.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the input stream and return bytes
|
||||||
|
is.close();
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
byte[] original = "Hello world".getBytes();
|
||||||
|
System.out.println("Starting PGP test");
|
||||||
|
|
||||||
|
CryptorRSAFactory factory= new CryptorRSAFactory();
|
||||||
|
Pair<byte[], byte[]> result = factory.generate(2048);
|
||||||
|
Date date = new Date();
|
||||||
|
|
||||||
|
BcPGPKeyConverter converter = new BcPGPKeyConverter();
|
||||||
|
AsymmetricKeyParameter publicKeyParameter = PublicKeyFactory.createKey(result.first);
|
||||||
|
PGPPublicKey pgpPublicKey = converter.getPGPPublicKey(1, publicKeyParameter, date);
|
||||||
|
|
||||||
|
byte[] encrypted = encrypt(original, pgpPublicKey, null,
|
||||||
|
true, true);
|
||||||
|
|
||||||
|
System.out.println("\nencrypted data = '" + new String(encrypted) + "'");
|
||||||
|
|
||||||
|
AsymmetricKeyParameter privateKeyParameter = PrivateKeyFactory.createKey(result.second);
|
||||||
|
PGPPrivateKey pgpPrivateKey = converter.getPGPPrivateKey(pgpPublicKey, privateKeyParameter);
|
||||||
|
|
||||||
|
byte[] decrypted = decrypt(encrypted, pgpPrivateKey);
|
||||||
|
|
||||||
|
System.out.println("\ndecrypted data = '" + new String(decrypted) + "'");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -10,7 +10,7 @@ INSERT IGNORE INTO registry (k,v) VALUES ("max_users", "1000");
|
|||||||
CREATE TABLE IF NOT EXISTS user (
|
CREATE TABLE IF NOT EXISTS user (
|
||||||
version VARCHAR(50),
|
version VARCHAR(50),
|
||||||
id INTEGER AUTO_INCREMENT,
|
id INTEGER AUTO_INCREMENT,
|
||||||
name VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '',
|
name VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
v TEXT,
|
v TEXT,
|
||||||
s TEXT,
|
s TEXT,
|
||||||
mark TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
mark TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
@ -41,7 +41,7 @@ CREATE TABLE IF NOT EXISTS failure (
|
|||||||
CREATE TABLE IF NOT EXISTS deleted_user (
|
CREATE TABLE IF NOT EXISTS deleted_user (
|
||||||
version VARCHAR(50),
|
version VARCHAR(50),
|
||||||
id INTEGER AUTO_INCREMENT,
|
id INTEGER AUTO_INCREMENT,
|
||||||
name VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '',
|
name VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
v TEXT,
|
v TEXT,
|
||||||
s TEXT,
|
s TEXT,
|
||||||
mark TIMESTAMP NULL DEFAULT NULL,
|
mark TIMESTAMP NULL DEFAULT NULL,
|
||||||
@ -51,5 +51,4 @@ CREATE TABLE IF NOT EXISTS deleted_user (
|
|||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS deleted_mail_block LIKE mail_block;
|
CREATE TABLE IF NOT EXISTS deleted_mail_block LIKE mail_block;
|
||||||
CREATE TABLE IF NOT EXISTS deleted_key_block LIKE key_block;
|
CREATE TABLE IF NOT EXISTS deleted_key_block LIKE key_block;
|
||||||
DROP TABLE IF EXISTS metadata;
|
|
||||||
|
|
@ -27,7 +27,7 @@ public abstract class HttpDelegate
|
|||||||
boolean binaryInput = (Boolean)V(3);
|
boolean binaryInput = (Boolean)V(3);
|
||||||
boolean binaryOutput = (Boolean)V(4);
|
boolean binaryOutput = (Boolean)V(4);
|
||||||
|
|
||||||
byte[] content = (byte[])arguments[0];
|
byte[] content = (arguments!=null && arguments.length > 0) ? (byte[])arguments[0] : null;
|
||||||
|
|
||||||
execute(action, url, headers, binaryInput, binaryOutput, content, callback);
|
execute(action, url, headers, binaryInput, binaryOutput, content, callback);
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import mail.client.model.Attachments;
|
|||||||
import mail.client.model.Body;
|
import mail.client.model.Body;
|
||||||
import mail.client.model.Conversation;
|
import mail.client.model.Conversation;
|
||||||
import mail.client.model.Header;
|
import mail.client.model.Header;
|
||||||
|
import mail.client.model.Identity;
|
||||||
import mail.client.model.Mail;
|
import mail.client.model.Mail;
|
||||||
import mail.client.model.Recipients;
|
import mail.client.model.Recipients;
|
||||||
import mail.client.model.TransportState;
|
import mail.client.model.TransportState;
|
||||||
@ -167,4 +168,9 @@ public class Actions extends Servent<Master>
|
|||||||
|
|
||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void lookUpPGPKeyFor (Identity identity)
|
||||||
|
{
|
||||||
|
master.getMailer().lookUpPGPFor (identity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -151,4 +151,8 @@ public class Mailer extends Servent<Master>
|
|||||||
master.getIndexer().conversationChanged(conversation);
|
master.getIndexer().conversationChanged(conversation);
|
||||||
master.getEventPropagator().signal(Events.SendFailed, mail);
|
master.getEventPropagator().signal(Events.SendFailed, mail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void lookUpPGPFor(Identity identity)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
9
java/core/src/mail/server/db/ExternalData.java
Normal file
9
java/core/src/mail/server/db/ExternalData.java
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package mail.server.db;
|
||||||
|
|
||||||
|
public interface ExternalData {
|
||||||
|
|
||||||
|
public void addUser (String name, String password) throws Exception;
|
||||||
|
public void removeUser (String name) throws Exception;
|
||||||
|
|
||||||
|
public void setUserPassword (String name, String password) throws Exception;
|
||||||
|
}
|
11
java/core/src/mail/server/db/ExternalDataFactory.java
Normal file
11
java/core/src/mail/server/db/ExternalDataFactory.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package mail.server.db;
|
||||||
|
|
||||||
|
import mail.server.postfix.ExternalDataPostfix;
|
||||||
|
|
||||||
|
public class ExternalDataFactory {
|
||||||
|
|
||||||
|
public static ExternalData createInstance () throws Exception
|
||||||
|
{
|
||||||
|
return new ExternalDataPostfix();
|
||||||
|
}
|
||||||
|
}
|
34
java/core/src/mail/server/james/ExternalDataJames.java
Normal file
34
java/core/src/mail/server/james/ExternalDataJames.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package mail.server.james;
|
||||||
|
|
||||||
|
import org.apache.james.cli.probe.impl.JmxServerProbe;
|
||||||
|
|
||||||
|
import mail.server.db.ExternalData;
|
||||||
|
|
||||||
|
public class ExternalDataJames implements ExternalData
|
||||||
|
{
|
||||||
|
JmxServerProbe jamesConnection;
|
||||||
|
|
||||||
|
public ExternalDataJames () throws Exception
|
||||||
|
{
|
||||||
|
jamesConnection = new JmxServerProbe("localhost");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addUser(String name, String password) throws Exception
|
||||||
|
{
|
||||||
|
jamesConnection.addUser(name, password);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeUser(String name) throws Exception
|
||||||
|
{
|
||||||
|
jamesConnection.removeUser(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUserPassword(String name, String password) throws Exception
|
||||||
|
{
|
||||||
|
jamesConnection.setPassword(name, password);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
123
java/core/src/mail/server/postfix/ExternalDataPostfix.java
Normal file
123
java/core/src/mail/server/postfix/ExternalDataPostfix.java
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
package mail.server.postfix;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
|
||||||
|
import core.util.LogOut;
|
||||||
|
import core.util.Passwords;
|
||||||
|
import mail.server.db.ExternalData;
|
||||||
|
import mail.server.postfix.sql.Catalog;
|
||||||
|
|
||||||
|
public class ExternalDataPostfix implements ExternalData
|
||||||
|
{
|
||||||
|
Catalog catalog = new Catalog();
|
||||||
|
LogOut log = new LogOut (ExternalDataPostfix.class);
|
||||||
|
|
||||||
|
public ExternalDataPostfix() throws Exception
|
||||||
|
{
|
||||||
|
ensureTables();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ensureTables() throws SQLException, IOException
|
||||||
|
{
|
||||||
|
Connection connection = openConnection();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (String sql : catalog.getMulti(catalog.CREATE_TABLES))
|
||||||
|
{
|
||||||
|
PreparedStatement statement = connection.prepareStatement (sql);
|
||||||
|
log(statement);
|
||||||
|
statement.executeUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
closeConnection(connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addUser(String name, String password) throws Exception
|
||||||
|
{
|
||||||
|
Connection connection = openConnection();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
PreparedStatement statement = connection.prepareStatement (catalog.getSingle(catalog.ADD_USER));
|
||||||
|
statement.setString(1, name);
|
||||||
|
statement.setString(2, password);
|
||||||
|
|
||||||
|
statement.executeUpdate();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
closeConnection(connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeUser (String name) throws Exception
|
||||||
|
{
|
||||||
|
Connection connection = openConnection();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
PreparedStatement statement = connection.prepareStatement (catalog.getSingle(catalog.REMOVE_USER));
|
||||||
|
statement.setString(1, name);
|
||||||
|
|
||||||
|
statement.executeUpdate();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
closeConnection(connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUserPassword(String name, String password) throws Exception
|
||||||
|
{
|
||||||
|
Connection connection = openConnection();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
PreparedStatement statement = connection.prepareStatement (catalog.getSingle(catalog.CHANGE_PASSWORD));
|
||||||
|
statement.setString(1, password);
|
||||||
|
statement.setString(2, name);
|
||||||
|
|
||||||
|
statement.executeUpdate();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
closeConnection(connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Connection openConnection () throws IOException, SQLException
|
||||||
|
{
|
||||||
|
log.debug("Connecting to", catalog.CONNECTION_STRING);
|
||||||
|
return DriverManager.getConnection(catalog.CONNECTION_STRING, catalog.USER, Passwords.getPasswordFor(catalog.USER));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void closeConnection (Connection connection)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (connection != null)
|
||||||
|
connection.close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public void log (Statement sql)
|
||||||
|
{
|
||||||
|
log.debug (sql);
|
||||||
|
}
|
||||||
|
}
|
26
java/core/src/mail/server/postfix/PostfixMailReceiver.java
Normal file
26
java/core/src/mail/server/postfix/PostfixMailReceiver.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package mail.server.postfix;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
|
||||||
|
import mail.server.handler.UserInformation;
|
||||||
|
import mail.server.handler.UserInformationFactory;
|
||||||
|
|
||||||
|
import core.util.Streams;
|
||||||
|
|
||||||
|
|
||||||
|
public class PostfixMailReceiver
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param args
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) throws Exception
|
||||||
|
{
|
||||||
|
Class.forName("com.mysql.jdbc.Driver");
|
||||||
|
String toAddress = args[1];
|
||||||
|
byte[] bytes = Streams.readFullyBytes(System.in);
|
||||||
|
|
||||||
|
UserInformation userInfo = UserInformationFactory.getInstance().getUserInformation(toAddress);
|
||||||
|
userInfo.handleIn(new ByteArrayInputStream(bytes));
|
||||||
|
}
|
||||||
|
}
|
36
java/core/src/mail/server/postfix/sql/Catalog.java
Normal file
36
java/core/src/mail/server/postfix/sql/Catalog.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/**
|
||||||
|
* Author: Timothy Prepscius
|
||||||
|
* License: GPLv3 Affero + keep my name in the code!
|
||||||
|
*/
|
||||||
|
|
||||||
|
package mail.server.postfix.sql;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import core.constants.ConstantsServer;
|
||||||
|
import core.util.Passwords;
|
||||||
|
import core.util.SqlCatalog;
|
||||||
|
|
||||||
|
|
||||||
|
public final class Catalog extends SqlCatalog
|
||||||
|
{
|
||||||
|
public String CONNECTION_STRING = ConstantsServer.DBCONNECTION_PREFIX + "postfix";
|
||||||
|
public String USER = "postfix";
|
||||||
|
|
||||||
|
public int FAILURE_TIMEOUT_SECONDS = 60;
|
||||||
|
|
||||||
|
public final String
|
||||||
|
CREATE_TABLES = "create_tables.sql",
|
||||||
|
ADD_USER = "add_user.sql",
|
||||||
|
REMOVE_USER = "remove_user.sql",
|
||||||
|
CHANGE_PASSWORD = "change_password.sql";
|
||||||
|
|
||||||
|
public Catalog ()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword () throws IOException
|
||||||
|
{
|
||||||
|
return Passwords.getPasswordFor(USER);
|
||||||
|
}
|
||||||
|
}
|
1
java/core/src/mail/server/postfix/sql/add_user.sql
Normal file
1
java/core/src/mail/server/postfix/sql/add_user.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
INSERT INTO user (name, password) VALUES (?, ?)
|
@ -0,0 +1,5 @@
|
|||||||
|
UPDATE user
|
||||||
|
SET
|
||||||
|
password = ?
|
||||||
|
WHERE
|
||||||
|
name = ?
|
8
java/core/src/mail/server/postfix/sql/create_tables.sql
Normal file
8
java/core/src/mail/server/postfix/sql/create_tables.sql
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS user (
|
||||||
|
name VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
password VARCHAR(255),
|
||||||
|
mark TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (name)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
1
java/core/src/mail/server/postfix/sql/remove_user.sql
Normal file
1
java/core/src/mail/server/postfix/sql/remove_user.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
DELETE FROM user WHERE user.name=?
|
@ -9,6 +9,8 @@ import java.math.BigInteger;
|
|||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import mail.server.db.ExternalData;
|
||||||
|
import mail.server.db.ExternalDataFactory;
|
||||||
import mail.server.db.MailUserDb;
|
import mail.server.db.MailUserDb;
|
||||||
|
|
||||||
import org.apache.james.cli.probe.impl.JmxServerProbe;
|
import org.apache.james.cli.probe.impl.JmxServerProbe;
|
||||||
@ -47,15 +49,14 @@ public class MailServerSessionDb implements SRPServerUserSessionDb
|
|||||||
|
|
||||||
public void setBlock (String userName, byte[] block) throws Exception
|
public void setBlock (String userName, byte[] block) throws Exception
|
||||||
{
|
{
|
||||||
|
ExternalData externalData = ExternalDataFactory.createInstance();
|
||||||
|
|
||||||
log.debug("setBlock", userName, Strings.toString(block));
|
log.debug("setBlock", userName, Strings.toString(block));
|
||||||
Environment e = JSONSerializer.deserialize(block);
|
Environment e = JSONSerializer.deserialize(block);
|
||||||
|
|
||||||
String newPassword = e.get(ConstantsEnvironmentKeys.SMTP_PASSWORD);
|
String newPassword = e.get(ConstantsEnvironmentKeys.SMTP_PASSWORD);
|
||||||
|
|
||||||
JmxServerProbe jamesConnection = new JmxServerProbe("localhost");
|
externalData.setUserPassword(userName, newPassword);
|
||||||
if (newPassword != null)
|
|
||||||
jamesConnection.setPassword(userName, newPassword);
|
|
||||||
|
|
||||||
db.setBlock(userName, block);
|
db.setBlock(userName, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +78,7 @@ public class MailServerSessionDb implements SRPServerUserSessionDb
|
|||||||
log.debug("createUser", version, userName);
|
log.debug("createUser", version, userName);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
JmxServerProbe jamesConnection = new JmxServerProbe("localhost");
|
ExternalData externalData = ExternalDataFactory.createInstance();
|
||||||
|
|
||||||
if (USE_CAPTCHA)
|
if (USE_CAPTCHA)
|
||||||
{
|
{
|
||||||
@ -93,7 +94,7 @@ public class MailServerSessionDb implements SRPServerUserSessionDb
|
|||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
String randomLong = BigInteger.valueOf(Math.abs(random.nextLong())).toString(32);
|
String randomLong = BigInteger.valueOf(Math.abs(random.nextLong())).toString(32);
|
||||||
|
|
||||||
jamesConnection.addUser(userName, randomLong);
|
externalData.addUser(userName, randomLong);
|
||||||
}
|
}
|
||||||
catch (PublicMessageException e)
|
catch (PublicMessageException e)
|
||||||
{
|
{
|
||||||
@ -112,10 +113,10 @@ public class MailServerSessionDb implements SRPServerUserSessionDb
|
|||||||
log.debug("deleteUser", userName);
|
log.debug("deleteUser", userName);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
JmxServerProbe jamesConnection = new JmxServerProbe("localhost");
|
ExternalData externalData = ExternalDataFactory.createInstance();
|
||||||
|
|
||||||
db.deleteUser(userName);
|
db.deleteUser(userName);
|
||||||
jamesConnection.removeUser(userName);
|
externalData.removeUser(userName);
|
||||||
}
|
}
|
||||||
catch (PublicMessageException e)
|
catch (PublicMessageException e)
|
||||||
{
|
{
|
||||||
|
2
java/ext/.gitignore
vendored
Normal file
2
java/ext/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
lcrypto-jdk15on-*
|
||||||
|
bc-packaged
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry excluding="**/*Test*|**/*test*|**/test/*" kind="src" path="src"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
|
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v7.0">
|
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v7.0">
|
||||||
<attributes>
|
<attributes>
|
@ -59,6 +59,9 @@
|
|||||||
<echo message="${ant.project.name}: ${ant.file}"/>
|
<echo message="${ant.project.name}: ${ant.file}"/>
|
||||||
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}">
|
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}">
|
||||||
<src path="src"/>
|
<src path="src"/>
|
||||||
|
<exclude name="**/*Test*"/>
|
||||||
|
<exclude name="**/test/*"/>
|
||||||
|
<exclude name="**/*test*"/>
|
||||||
<classpath refid="Mailiverse.Ext.BouncyCastle.classpath"/>
|
<classpath refid="Mailiverse.Ext.BouncyCastle.classpath"/>
|
||||||
</javac>
|
</javac>
|
||||||
</target>
|
</target>
|
1
java/ext/bc-project
Symbolic link
1
java/ext/bc-project
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
lcrypto-jdk15on-149
|
6
java/ext/bc-project-using-git/.classpath
Normal file
6
java/ext/bc-project-using-git/.classpath
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||||
|
<classpathentry kind="output" path="bin"/>
|
||||||
|
</classpath>
|
17
java/ext/bc-project-using-git/.project
Normal file
17
java/ext/bc-project-using-git/.project
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>bc-project</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
1
java/ext/bc-project-using-git/src/org/bouncycastle/LICENSE.java
Symbolic link
1
java/ext/bc-project-using-git/src/org/bouncycastle/LICENSE.java
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../bc-java/core/src/main/java/org/bouncycastle/LICENSE.java
|
1
java/ext/bc-project-using-git/src/org/bouncycastle/apache
Symbolic link
1
java/ext/bc-project-using-git/src/org/bouncycastle/apache
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../bc-java/pg/src/main/java/org/bouncycastle/apache
|
1
java/ext/bc-project-using-git/src/org/bouncycastle/asn1
Symbolic link
1
java/ext/bc-project-using-git/src/org/bouncycastle/asn1
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../bc-java/core/src/main/java/org/bouncycastle/asn1
|
1
java/ext/bc-project-using-git/src/org/bouncycastle/bcpg
Symbolic link
1
java/ext/bc-project-using-git/src/org/bouncycastle/bcpg
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../bc-java/pg/src/main/java/org/bouncycastle/bcpg
|
1
java/ext/bc-project-using-git/src/org/bouncycastle/crypto
Symbolic link
1
java/ext/bc-project-using-git/src/org/bouncycastle/crypto
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../bc-java/core/src/main/java/org/bouncycastle/crypto
|
1
java/ext/bc-project-using-git/src/org/bouncycastle/i18n
Symbolic link
1
java/ext/bc-project-using-git/src/org/bouncycastle/i18n
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../bc-java/core/src/main/java/org/bouncycastle/i18n
|
1
java/ext/bc-project-using-git/src/org/bouncycastle/math
Symbolic link
1
java/ext/bc-project-using-git/src/org/bouncycastle/math
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../../bc-java/core/src/main/java/org/bouncycastle/math
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPAlgorithmParameters.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPCompressedData.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPCompressedDataGenerator.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPDataValidationException.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPEncryptedData.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPEncryptedDataGenerator.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPEncryptedDataList.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPException.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPKdfParameters.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPKeyFlags.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPKeyPair.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPKeyRing.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPKeyRingGenerator.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPKeyValidationException.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPLiteralData.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPLiteralDataGenerator.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPMarker.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPObjectFactory.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPOnePassSignature.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPOnePassSignatureList.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPPBEEncryptedData.java
|
@ -0,0 +1 @@
|
|||||||
|
../../../../../bc-java/pg/src/main/java/org/bouncycastle/openpgp/PGPPrivateKey.java
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user