blob: 7c8740186a68bc0e4e8645ee30836cd1c9af4de4 (
plain) (
tree)
|
|
package org.openslx.satellitedaemon;
import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Random;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.openslx.satellitedaemon.filetransfer.FileDownloadWorker;
import org.openslx.satellitedaemon.filetransfer.FileUploadWorker;
/***********************************************************************************************/
/**
* Main class for uploading images from the HS-Server to the Satellite Server.
*
*/
public class App
{
private static Logger log = Logger.getLogger( App.class );
public static void main( String[] args ) throws NoSuchAlgorithmException
{
BasicConfigurator.configure();
int i = 0;
String arg;
String organizationName;
String modulus, privExp, pubExp;
String ipAddress;
// Check if there are arguments available and if they start with "--".
if (i < args.length && args[i].startsWith( "--" )) {
// Arguments available, take the first one.
arg = args[i++];
if (arg.equals( "--checkconfig" )) {
if (checkConfig()) {
System.exit( 0 );
}
System.exit( 2 );
} else if (arg.equals( "--genid" )) {
if (i < args.length) {
organizationName = args[i++];
if (genId(organizationName)) {
System.exit( 0 );
}
else
System.exit( 2 );
} else {
log.error( "--genid requires an organization name" );
System.exit( 2 );
}
} else if (arg.equals( "--import" )) {
if ((i + 3) < args.length) {
log.error( "Illelgal option: '--import' requires 4 arguments, <OrgName> <Modulus> <priv_Exponent> <pub_Exponent>" );
System.exit( 2 );
} else {
organizationName = args[i++];
modulus = args[i++];
privExp = args[i++];
pubExp = args[i++];
if (importId(organizationName, modulus, privExp, pubExp)) {
System.exit( 0 );
} else
System.exit( 2 );
}
} else if (arg.equals( "--submitkey")) {
if (i < args.length) {
ipAddress = args[i++];
if (submitKey(ipAddress))
System.exit( 0 );
else
System.exit( 2 );
} else {
log.error( "--submitkey requires <IPADDRESS>" );
System.exit( 2 );
}
} else if (arg.equals( "--updateaddress" )) {
if (i < args.length) {
ipAddress = args[i++];
if (updateAddress(ipAddress)) {
System.exit( 0 );
} else
System.exit( 2 );
} else {
log.error( "--updateaddress requires <IPADDRESS>" );
System.exit( 2 );
}
}
} else if (args.length == 0) {
// No Option choosed, try to load existing identity.
if (!tryLoadIdentity()) {
System.exit( 2 );
}
}
if ( !Globals.masterServerSslContextInit() ) {
log.error( "Problem with initializing the SSLContext" );
System.exit( 1 );
}
// Start Up- and Download.
Thread uploadWorker = new Thread( new FileUploadWorker() );
uploadWorker.start();
Thread downloadWorker = new Thread( new FileDownloadWorker() );
downloadWorker.start();
}
private static boolean checkConfig() {
if (Identity.getOrganizationName() == null)
return false;
// TODO: check members of identity.java.
// Testing encryption and description
Random rnd = new Random();
if (Identity.keySize() != -1) {
int size = rnd.nextInt(Identity.keySize() - 1);
BigInteger text = new BigInteger(size,rnd);
RSAPublicKey pub = (RSAPublicKey) Identity.getPublicKey();
RSAPrivateKey priv = (RSAPrivateKey) Identity.getPrivateKey();
BigInteger cipher = text.modPow(pub.getPublicExponent(), pub.getModulus());
BigInteger decrypted = cipher.modPow(priv.getPrivateExponent(), priv.getModulus());
boolean isPassed = text.equals(decrypted);
return isPassed;
}
return false;
// System.out.println("--- RSA encryption test ---");
// System.out.println("Is test passed: "+isPassed);
// System.out.println("Original text: "+text);
// System.out.println("Cipher text: "+cipher);
// System.out.println("Decrypted text: "+decrypted);
}
private static boolean genId(String organizationName) {
// TODO.
return false;
}
private static boolean importId(String organizationName, String modulus, String privExp, String pubExp) {
// TODO.
return false;
}
private static boolean submitKey(String ipAddress) {
// TODO.
return false;
}
private static boolean updateAddress(String ipAddress) {
// TODO.
return false;
}
private static boolean tryLoadIdentity() {
// TODO.
return false;
}
}
|