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, " ); 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 " ); 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 " ); 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; // First check existing members (modulus, privExp, pubExp) of Identity. if (!Identity.checkMembers()) return false; // Testing encryption and description with given public and private key. // Idea: creating random text for encrypting and decrypting again. 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(); // Encrypt. BigInteger cipher = text.modPow(pub.getPublicExponent(), pub.getModulus()); // Decrypt again. BigInteger decrypted = cipher.modPow(priv.getPrivateExponent(), priv.getModulus()); boolean isPassed = text.equals(decrypted); return isPassed; } return false; } 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; } }