X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FGigiConfig.java;h=3a1b9eed6642aadbbf4d733e9b3440a118ff248e;hp=0bf926e0999139571c91bd08f82390482e85a4a4;hb=fa1ae652fbff9c7caeded3fc89680703d1da381b;hpb=634b7f75c8fc2ed8799bad74731278fb59198c48 diff --git a/src/org/cacert/gigi/GigiConfig.java b/src/org/cacert/gigi/GigiConfig.java index 0bf926e0..3a1b9eed 100644 --- a/src/org/cacert/gigi/GigiConfig.java +++ b/src/org/cacert/gigi/GigiConfig.java @@ -1,72 +1,100 @@ package org.cacert.gigi; import java.io.ByteArrayInputStream; -import java.io.DataInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.security.GeneralSecurityException; import java.security.KeyStore; import java.util.Properties; +import org.kamranzafar.jtar.TarEntry; +import org.kamranzafar.jtar.TarInputStream; + public class GigiConfig { - public static final String GIGI_CONFIG_VERSION = "GigiConfigV1.0"; - byte[] cacerts; - byte[] keystore; - Properties mainProps = new Properties(); - private char[] keystorpw; - private char[] truststorepw; - - private GigiConfig() { - } - public byte[] getCacerts() { - return cacerts; - } - public byte[] getKeystore() { - return keystore; - } - public Properties getMainProps() { - return mainProps; - } - - public static GigiConfig parse(InputStream input) throws IOException { - DataInputStream dis = new DataInputStream(input); - String version = new String(readChunk(dis)); - if (!version.equals(GIGI_CONFIG_VERSION)) { - System.out.println("Invalid config format"); - System.exit(0); - } - GigiConfig gc = new GigiConfig(); - gc.keystorpw = transformSafe(readChunk(dis)); - gc.truststorepw = transformSafe(readChunk(dis)); - gc.mainProps.load(new ByteArrayInputStream(readChunk(dis))); - gc.cacerts = readChunk(dis); - gc.keystore = readChunk(dis); - return gc; - } - private static char[] transformSafe(byte[] readChunk) { - char[] res = new char[readChunk.length]; - for (int i = 0; i < res.length; i++) { - res[i] = (char) readChunk[i]; - readChunk[i] = 0; - } - return res; - } - private static byte[] readChunk(DataInputStream dis) throws IOException { - int length = dis.readInt(); - byte[] contents = new byte[length]; - dis.readFully(contents); - return contents; - } - public KeyStore getPrivateStore() throws GeneralSecurityException, - IOException { - KeyStore ks1 = KeyStore.getInstance("pkcs12"); - ks1.load(new ByteArrayInputStream(keystore), keystorpw); - return ks1; - } - public KeyStore getTrustStore() throws GeneralSecurityException, - IOException { - KeyStore ks1 = KeyStore.getInstance("jks"); - ks1.load(new ByteArrayInputStream(cacerts), truststorepw); - return ks1; - } + + public static final String GIGI_CONFIG_VERSION = "GigiConfigV1.0"; + + private byte[] cacerts; + + private byte[] keystore; + + private Properties mainProps = new Properties(); + + private char[] keystorpw; + + private char[] truststorepw; + + private GigiConfig() {} + + public byte[] getCacerts() { + return cacerts; + } + + public byte[] getKeystore() { + return keystore; + } + + public Properties getMainProps() { + return mainProps; + } + + public static GigiConfig parse(InputStream input) throws IOException { + TarInputStream tis = new TarInputStream(input); + TarEntry t; + GigiConfig gc = new GigiConfig(); + while ((t = tis.getNextEntry()) != null) { + if (t.getName().equals("gigi.properties")) { + gc.mainProps.load(tis); + } else if (t.getName().equals("cacerts.jks")) { + gc.cacerts = readFully(tis); + } else if (t.getName().equals("keystore.pkcs12")) { + gc.keystore = readFully(tis); + } else if (t.getName().equals("keystorepw")) { + gc.keystorpw = transformSafe(readFully(tis)); + } else if (t.getName().equals("truststorepw")) { + gc.truststorepw = transformSafe(readFully(tis)); + } else { + System.out.println("Unknown config: " + t.getName()); + } + } + tis.close(); + return gc; + } + + public static byte[] readFully(InputStream is) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len = 0; + while ((len = is.read(buffer)) > 0) { + baos.write(buffer, 0, len); + } + baos.close(); + return baos.toByteArray(); + } + + private static char[] transformSafe(byte[] readChunk) { + char[] res = new char[readChunk.length]; + for (int i = 0; i < res.length; i++) { + res[i] = (char) readChunk[i]; + readChunk[i] = 0; + } + return res; + } + + public KeyStore getPrivateStore() throws GeneralSecurityException, IOException { + KeyStore ks1 = KeyStore.getInstance("pkcs12"); + ks1.load(new ByteArrayInputStream(keystore), keystorpw); + return ks1; + } + + public KeyStore getTrustStore() throws GeneralSecurityException, IOException { + KeyStore ks1 = KeyStore.getInstance("jks"); + ks1.load(new ByteArrayInputStream(cacerts), truststorepw); + return ks1; + } + + public String getPrivateStorePw() { + return new String(keystorpw); + } }