diff --git a/build.xml b/build.xml
index c2fe714..cb4aea9 100644
--- a/build.xml
+++ b/build.xml
@@ -18,7 +18,12 @@
-
+
+
+
+
+
+
0) {
+ bos.write(buf, 0, count);
+ } else if (count == 0 && inflator.finished()) {
+ break;
+ } else {
+ throw new RuntimeException("bad zip data, size:"
+ + input.length);
+ }
+ }
+ } catch (DataFormatException t) {
+ throw new RuntimeException(t);
+ } finally {
+ inflator.end();
+ }
+ return bos.toByteArray();
+ }
+
+ public static byte[] getBytesFromFile(File file) throws IOException {
+ InputStream is = new FileInputStream(file);
+
+ // Get the size of the file
+ long length = file.length();
+
+ // You cannot create an array using a long type.
+ // It needs to be an int type.
+ // Before converting to an int type, check
+ // to ensure that file is not larger than Integer.MAX_VALUE.
+ if (length > Integer.MAX_VALUE) {
+ // File is too large
+ }
+
+ // Create the byte array to hold the data
+ byte[] bytes = new byte[(int)length];
+
+ // Read in the bytes
+ int offset = 0;
+ int numRead = 0;
+ while (offset < bytes.length
+ && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
+ offset += numRead;
+ }
+
+ // Ensure all the bytes have been read in
+ if (offset < bytes.length) {
+ throw new IOException("Could not completely read file "+file.getName());
+ }
+
+ // Close the input stream and return bytes
+ is.close();
+ return bytes;
+ }
+
+
+ public static List hydrateFromBytes(byte[] derblob) {
Util util = new Util();
+
+ try {
+ return util.hydrateContentPackage(derblob);
+ } catch (IOException ex) {
+ System.out.println(ex);
+ }
+ return null;
+ }
+
+ public static List hydrateFromFile(String filename) {
+ try {
+ return hydrateFromBytes(getBytesFromFile(new File(filename)));
+ } catch (IOException ex) {
+ System.out.println(ex);
+ }
+ return null;
+ }
+
+ public static void showTreeFromCSFIle(String filename) {
FileInputStream fis;
DataInputStream in;
BufferedReader br;
String content;
List contentList;
+ Util util = new Util();
+ try {
+ fis = new FileInputStream(filename);
+ } catch (FileNotFoundException ex) {
+ System.out.printf("ERROR: failed to find file %s\n", filename);
+ return;
+ } catch (Throwable t) {
+ System.out.printf("ERROR: [%s] %s\n", filename, t);
+ return;
+ }
+
+ in = new DataInputStream(fis);
+ br = new BufferedReader(new InputStreamReader(in));
+ contentList = new ArrayList();
+
+ try {
+ while ((content = br.readLine()) != null) {
+ contentList.add(content);
+ }
+ } catch (IOException ex) {
+ System.out.printf("ERROR: [%s] - %s\n", filename, ex);
+ return;
+ }
+
+ //System.out.println(contentList.toString());
+ PathNode root = new PathNode();
+ util.makePathTree(contentList, root);
+ Util.printTree(root, 0);
+ }
+
+ public static ASN1Encodable objectFromCertOid(String certFilename, String oid) {
+ X509Certificate cert;
+ cert = certFromFile(certFilename);
+ if (cert == null) { return null; }
+
+ try {
+ for (String thisOid : cert.getNonCriticalExtensionOIDs()) {
+ if (thisOid.equals(oid)) {
+ return X509ExtensionUtil.fromExtensionValue(cert.getExtensionValue(oid));
+ }
+ }
+ } catch (IOException ex) { }
+ return null;
+ }
+
+ public static X509Certificate certFromFile(String certFilename) {
+ FileInputStream fis;
+ BufferedInputStream bis;
+ CertificateFactory cf;
+ X509Certificate cert;
+
+ try {
+ fis = new FileInputStream(certFilename);
+ } catch (FileNotFoundException ex) {
+ return null;
+ }
+
+ bis = new BufferedInputStream(fis);
+
+ try {
+ cf = CertificateFactory.getInstance("X.509");
+ } catch (CertificateException ex) {
+ return null;
+ }
+
+ try {
+ while (bis.available() > 0) {
+ cert = (X509Certificate) cf.generateCertificate(bis);
+ return cert;
+ }
+ } catch (IOException ex) {
+ } catch (CertificateException cex) {
+ }
+ return null;
+ }
+
+ public static void main(String[] args) {
for (String arg : args) {
- try {
- fis = new FileInputStream(arg);
- } catch (FileNotFoundException ex) {
- System.out.printf("ERROR: failed to find file %s\n", arg);
- continue;
- } catch (Throwable t) {
- System.out.printf("ERROR: [%s] %s\n", arg, t);
- continue;
- }
+ //showTreeFromCSFIle(arg);
+ //showTreeFromCSFIle(arg);
+ //bytesFromCertOid(arg, "1.3.6.1.4.1.2312.9.7");
+ //System.out.println(objectFromCertOid(arg, "1.3.6.1.4.1.2312.9.7").toString());
- in = new DataInputStream(fis);
- br = new BufferedReader(new InputStreamReader(in));
- contentList = new ArrayList();
+ //System.out.println(objectFromCertOid(arg, "1.3.6.1.4.1.2312.9.7").getClass().getName());
+ DEROctetString dos;
+ byte[] bytes;
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ List contents;
+ dos = (DEROctetString)objectFromCertOid(arg, "1.3.6.1.4.1.2312.9.7");
try {
- while ((content = br.readLine()) != null) {
- contentList.add(content);
- }
+ baos.write(dos.getOctets());
} catch (IOException ex) {
- System.out.printf("ERROR: [%s] - %s\n", arg, ex);
- continue;
+ System.out.println(ex);
+ }
+ bytes = decompress(baos.toByteArray());
+ contents = hydrateFromBytes(bytes);
+ if (contents != null) {
+ for (String content : contents) {
+ System.out.println(content);
+ }
}
- //System.out.println(contentList.toString());
- PathNode root = new PathNode();
- util.makePathTree(contentList, root);
-
- Util.printTree(root, 0);
+ //X509Certificate cert = certFromFile(arg);
+ //System.out.println(cert.toString());
}
}
}
diff --git a/src/main/java/com/redhat/trie/Util.java b/src/main/java/com/redhat/trie/Util.java
index dbefe23..dba7043 100644
--- a/src/main/java/com/redhat/trie/Util.java
+++ b/src/main/java/com/redhat/trie/Util.java
@@ -521,6 +521,7 @@ public class Util {
pathDictionary.add(new HuffNode(HuffNode.END_NODE, weight));
HuffNode pathTrie = makeTrie(pathDictionary);
+ // setup input stream, offset by the dictionary, to the end
StringBuffer nodeBits = new StringBuffer();
ByteArrayInputStream bais = new ByteArrayInputStream(payload,
(new Long(read)).intValue(), (new Long(payload.length - read).intValue()));