- 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);
+ }