Search in sources :

Example 1 with Pipe

use of org.tomitribe.util.Pipe in project churchkey by tomitribe.

the class Asn1Dump method dump.

public static String dump(final byte[] bytes) throws IOException {
    final File der = File.createTempFile("der", ".dump");
    if (bytes[0] == '-' && bytes[1] == '-') {
        final Pem pem = Pem.parse(bytes);
        IO.copy(pem.getData(), der);
    } else {
        IO.copy(bytes, der);
    }
    final PrintString err = new PrintString();
    final PrintString out = new PrintString();
    final ProcessBuilder builder = new ProcessBuilder("openssl", "asn1parse", "-i", "-inform", "DER", "-in", der.getAbsolutePath(), "-dump");
    final Process process = builder.start();
    final Future<Pipe> o = Pipe.pipe(process.getInputStream(), out);
    final Future<Pipe> e = Pipe.pipe(process.getErrorStream(), err);
    try {
        final int i = process.waitFor();
        o.get();
        e.get();
        if (i != 0) {
            throw new IllegalStateException("Exit code " + i + "\n" + err);
        }
    } catch (InterruptedException | ExecutionException exception) {
        throw new IllegalStateException(exception);
    } finally {
        out.close();
        err.close();
        der.delete();
    }
    return out.toString();
}
Also used : PrintString(org.tomitribe.util.PrintString) Pem(io.churchkey.util.Pem) Pipe(org.tomitribe.util.Pipe) ExecutionException(java.util.concurrent.ExecutionException) File(java.io.File)

Aggregations

Pem (io.churchkey.util.Pem)1 File (java.io.File)1 ExecutionException (java.util.concurrent.ExecutionException)1 Pipe (org.tomitribe.util.Pipe)1 PrintString (org.tomitribe.util.PrintString)1