working along to decode the DEROctetString
This commit is contained in:
parent
5a3abc75a1
commit
b07f5a05e8
6 changed files with 285 additions and 24 deletions
|
@ -18,7 +18,12 @@
|
||||||
<target name="compile" depends="init"
|
<target name="compile" depends="init"
|
||||||
description="compile the source " >
|
description="compile the source " >
|
||||||
<!-- Compile the java code from ${src.dir} into ${build.dir} -->
|
<!-- Compile the java code from ${src.dir} into ${build.dir} -->
|
||||||
<javac srcdir="${src.dir}" destdir="${build.dir}"/>
|
<javac includeantruntime="false" srcdir="${src.dir}" destdir="${build.dir}">
|
||||||
|
<classpath>
|
||||||
|
<pathelement path="${classpath}"/>
|
||||||
|
<pathelement location="lib/bcprov-jdk16-1.46.jar"/>
|
||||||
|
</classpath>
|
||||||
|
</javac>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="dist" depends="compile"
|
<target name="dist" depends="compile"
|
||||||
|
|
70
data/test-certv3.pem
Normal file
70
data/test-certv3.pem
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDrjCCAxegAwIBAgIIPjHvQ1mahX4wDQYJKoZIhvcNAQEFBQAwUjExMC8GA1UE
|
||||||
|
AwwoanNlZmxlci1mMTQtY2FuZGxlcGluLnVzZXJzeXMucmVkaGF0LmNvbTELMAkG
|
||||||
|
A1UEBhMCVVMxEDAOBgNVBAcMB1JhbGVpZ2gwHhcNMTIwOTI0MDAwMDAwWhcNMTMw
|
||||||
|
OTI0MDAwMDAwWjArMSkwJwYDVQQDEyA4YTkwZjgxZDM5ZmFjMGVlMDEzOWZlMzhl
|
||||||
|
NGY2MzE3ZjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+Dq57Pnq5i
|
||||||
|
IvRT+nyvSMvhxTyzoBQ67Do3AKG0LvRopKLq0gNjouuJCUrLSGIVy2yEnbM+HPnX
|
||||||
|
Nkh/QLsOc6QUcBSVlnFV/Xd/sXB+GtWoy1GzcmMNUUoNDbdIZjj+Omdm0/8ueofG
|
||||||
|
1QDOH4RZHR25lquDovkZU/WzSv5XKyiqPqFiHt+D8QFRXiHb7i6+yLThF4nNdtkk
|
||||||
|
97yai3xHRrRVqWhqR8nYIF7dPHsTByMUSaoRz5iKO5rmg9BBrZE4+kDZLFE+28wR
|
||||||
|
xtzD/Die2GdJwe7mQ5m0HUJC+1g9lyOruAyUKbJxl95HxGObBQZmVMddOZjNC14W
|
||||||
|
Dwt4kLf/qXECAwEAAaOCAS4wggEqMBEGCWCGSAGG+EIBAQQEAwIFoDALBgNVHQ8E
|
||||||
|
BAMCBLAwgYIGA1UdIwR7MHmAFIwL3uxPnqv0NKLwhuL/TkX149zOoVakVDBSMTEw
|
||||||
|
LwYDVQQDDChqc2VmbGVyLWYxNC1jYW5kbGVwaW4udXNlcnN5cy5yZWRoYXQuY29t
|
||||||
|
MQswCQYDVQQGEwJVUzEQMA4GA1UEBwwHUmFsZWlnaIIJAMZok6HSfyb6MB0GA1Ud
|
||||||
|
DgQWBBQH/TRkcUo2VBq+LlvyqSpAMaEQiDATBgNVHSUEDDAKBggrBgEFBQcDAjAS
|
||||||
|
BgkrBgEEAZIICQYEBQwDMy4wMDsGCSsGAQQBkggJBwQuBCx42stLLUstYkjLz2dQ
|
||||||
|
KUrNSU0sBvMTc8oTK4sZChJLMhgA1NoL9QX6yNyT6DANBgkqhkiG9w0BAQUFAAOB
|
||||||
|
gQAMWeuSinQawzoJ8TvcbuC/d3dmJQIPPGNFbFNwADoBEfW4S9bblroMTgms1W5n
|
||||||
|
yFwoJo9WNjnDJbnHFdmesXeA07YkdklMkzfbTtTE+GiTLfd5gjYIkTLka8CaYVpw
|
||||||
|
6kWfcQe8CI7/15rhjCukzTJvguAMDNlGFNlHwXRA+NWTPw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
-----BEGIN ENTITLEMENT DATA-----
|
||||||
|
eJy1VV1vmzAU/SvI2iM0NuSD8NZO2l4ybVL6tCqqjLmhqGBTY7eLovz3XUNa0jVk
|
||||||
|
2dZFkcDcyzn3nHtttkQo2dgKNElIGM/G8QTSIBLxOhiHGQ3SSUiD6VRkDKYQ80wQ
|
||||||
|
nzxYLk1hNiRhPmls2ghd1KZQkiRb0txbROJP0KgKVBM0oB8R3CeSV4CRyy7ifV16
|
||||||
|
yzbkXVmZlZBhyhPXspA5SSKKwErcg2lIEvqk4pLnUIE0JDHaAkbx3UKAYyzhEUpE
|
||||||
|
/qahKmyFOGZTO6qFC3gR2e18onTmJG6JtFXaio35nK5jlkXzNRcUgLL2jqWzGaU0
|
||||||
|
nrwSOkFGw7VxJlEWBnQehONrSpP2/x1zQWZdMDoSRI+N5sK9PsUlF0JZp4WwMIoY
|
||||||
|
i/DCCFZZa5VZ4UTfbEnhAKMZnU569z6WtjGg0STvqsA8n6CDTWs9YRfUYWtxVxgQ
|
||||||
|
xmpwOORysSCrroTWv5vVzj8Apydb8yvH9IKdxbEnCKNJ345N25s91z41gKo2m7zO
|
||||||
|
MVLytO3jc6hddwlBl/GIJivXOwONCfYrdI2bO3w4Wis1au99gvm3Vjs0XFRgeMYN
|
||||||
|
v4UfdaGRnb44wAbK4+UT3zQBSJ7iaAbPwvoiBxPOrHHUAYw+aCiBN9Dtkb7sN4md
|
||||||
|
A2+khLQXQwfESId+QstQ/Fwpcl/9HoEka142cFxNmzskZnogJozGvxkdqU7NjVT/
|
||||||
|
bWjCgcIMz/OjBr8J/NmQnDMYGh4slpndIle7Ja8vP7vhxktI+h3P8Hfa1iFD/9LJ
|
||||||
|
vlx8Njru66sDaXZwIC0Uz7wrXnIp3vHEiw8IuM7B+1SU4C1tXStt3otk1pMs7zg2
|
||||||
|
xlsapfEj9l4E857gy8vX8V/AV7ufwASTMQ==
|
||||||
|
-----END ENTITLEMENT DATA-----
|
||||||
|
-----BEGIN RSA SIGNATURE-----
|
||||||
|
cN+DtEyAEoB6VRj3JQUiF++Yn/jDEAXpEkU5jtILZmWVBCTm/IgBSoEh8+idrZSF
|
||||||
|
nkAyrw5JB7YbKwmcfhyDU4/tE/x4WLZhd7e4Fs3IndY/S/YzYL8mafOK2PbVGxeA
|
||||||
|
ZyAnDZPe/CYX/FzNEgk4z62EbvYAtMMx4I3aif5qce8=
|
||||||
|
-----END RSA SIGNATURE-----
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEAr4Orns+ermIi9FP6fK9Iy+HFPLOgFDrsOjcAobQu9GikourS
|
||||||
|
A2Oi64kJSstIYhXLbISdsz4c+dc2SH9Auw5zpBRwFJWWcVX9d3+xcH4a1ajLUbNy
|
||||||
|
Yw1RSg0Nt0hmOP46Z2bT/y56h8bVAM4fhFkdHbmWq4Oi+RlT9bNK/lcrKKo+oWIe
|
||||||
|
34PxAVFeIdvuLr7ItOEXic122ST3vJqLfEdGtFWpaGpHydggXt08exMHIxRJqhHP
|
||||||
|
mIo7muaD0EGtkTj6QNksUT7bzBHG3MP8OJ7YZ0nB7uZDmbQdQkL7WD2XI6u4DJQp
|
||||||
|
snGX3kfEY5sFBmZUx105mM0LXhYPC3iQt/+pcQIDAQABAoIBABHAG0dAcCfqvOZA
|
||||||
|
6ABcKdyUxMHS2Mmy+9kXXvT7qBQH0T64yOyW0w9HGK17yaJB2gTrlJdgHMYXweGr
|
||||||
|
HPzOBVv+xScPydtEexHu1B8wYb5iB84He/YQjrwSfeSfadcxvu5eM+qG5NV+gmRG
|
||||||
|
dGGKMauj7V0DPyQ6L4eVzmvSnQbLpYGmfB8wQFuNRFYCYZ90SyuBn2CcC20sAEYZ
|
||||||
|
p76q0qzfdrRjkg//saoh4sU38NgOY3tYSok/14SI+g9EkIHGNFV9/Rq3mvlLcwi/
|
||||||
|
m98Mg69Yt0SF6PNTPwF6ZgsH1yWpvK9laycbEYZ44g7nIQOewQ0aKVHfDQt52rrA
|
||||||
|
/P2rV1ECgYEA+TevV8QdJei5TFpF8ERvbrFJn64SmqD/u5Wamki0QEoZ+SkdioWj
|
||||||
|
1C6jolHj85yVgC5nKBIlNm8f5hqp4p4E0b7BwvH5QbDRg5VDQfV5MBk87LC4Rj7Q
|
||||||
|
WQNhcicWF5pdAdgrmy0uZ2q3J386DS9y2dCm3bItIueKC132H4KzpHMCgYEAtEp9
|
||||||
|
kAqzmG3QJ+aI37e3OeL2XzUNDP47RaZicH5n3mmIVbffkgYu+wHkv7zukl3kdpsx
|
||||||
|
TWTuffjtcueMXmdHsqOukB+XkvcBXsWfweJq66uoxeZhYUQr04NEvapcZ/6wud5t
|
||||||
|
ZvMF/ASLL1zXAZ8IT7Xaufzbld1UT4MItYwcZYsCgYA760yIMInFjI/IsMex/fJA
|
||||||
|
zfVipAqrDNyPsGeMgsB72JUoF9+XZ4w9Pr1vEHtbHiG/wOhidQJndQ5ZV73S06Va
|
||||||
|
/J8/jMgeKDInjeKu4CM0Ek1YpyCXGxEi5bIvLQCdyipkgCHz3EgU605/+5Hsi6T0
|
||||||
|
g7srAGTjyIGjPAMqDlW8ywKBgQCVowXYGam6J9qOY17TH+4pU2Dc4HE2iYO0aUZm
|
||||||
|
y+N1y+1mB7i9v/gaSRYMtcjlHpzSfDhNXio7z/F0Xw44BEyTzhrCcBYj2nL+r9PK
|
||||||
|
3huUAuOPbYkBa81cPiU9rjoH7nHLsvrmaWpcI4FKDCo/pDkHv44Ms/ukxRCG9eCy
|
||||||
|
ndmrxQKBgGJiXMZnKjK9AUUDvsFBSp8Otrf20BoeCiq+tZF95S5jR9/I8nv4NBYp
|
||||||
|
59zCR1DOxxbyAHbRCjqZxdpZVAqKBl1BP+cmw93sAwJ3v9m+V4wFHVUFLJGmkXXV
|
||||||
|
X2mYlgErL9vzxIQrwfL5JdEo9f+PQ0eVs/lh9MPY2TliwEyXDrVp
|
||||||
|
-----END RSA PRIVATE KEY-----
|
BIN
lib/bcprov-jdk16-1.46.jar
Normal file
BIN
lib/bcprov-jdk16-1.46.jar
Normal file
Binary file not shown.
4
run.sh
Executable file
4
run.sh
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
java -cp ./lib/bcprov-jdk16-1.46.jar:$(ls -rt ./dist/*jar | tail -1) com.hashbangbash.trie.App ./data/test-certv3.pem
|
||||||
|
|
|
@ -4,10 +4,13 @@ import java.util.List;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -15,25 +18,127 @@ import java.io.IOException;
|
||||||
import com.redhat.trie.PathNode;
|
import com.redhat.trie.PathNode;
|
||||||
import com.redhat.trie.Util;
|
import com.redhat.trie.Util;
|
||||||
|
|
||||||
|
import java.util.zip.Inflater;
|
||||||
|
import java.util.zip.InflaterOutputStream;
|
||||||
|
import java.util.zip.Deflater;
|
||||||
|
import java.util.zip.DeflaterOutputStream;
|
||||||
|
import java.util.zip.DataFormatException;
|
||||||
|
import java.security.cert.Certificate;
|
||||||
|
import java.security.cert.CertificateException;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
|
import java.security.cert.CertificateFactory;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
|
||||||
|
import org.bouncycastle.asn1.*;
|
||||||
|
//import org.bouncycastle.asn1.ASN1Encodable;
|
||||||
|
//import org.bouncycastle.asn1.ASN1InputStream;
|
||||||
|
import org.bouncycastle.x509.extension.X509ExtensionUtil;
|
||||||
|
|
||||||
|
|
||||||
public class App {
|
public class App {
|
||||||
public static void main(String[] args) {
|
public static ASN1InputStream toASN1Stream(byte[] b) {
|
||||||
|
return new ASN1InputStream(new ByteArrayInputStream(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
public final static byte[] decompress(byte[] input) {
|
||||||
|
Inflater inflator = new Inflater();
|
||||||
|
inflator.setInput(input);
|
||||||
|
ByteArrayOutputStream bos = new ByteArrayOutputStream(input.length);
|
||||||
|
byte[] buf = new byte[1024];
|
||||||
|
try {
|
||||||
|
while (true) {
|
||||||
|
int count = inflator.inflate(buf);
|
||||||
|
if (count > 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<String> hydrateFromBytes(byte[] derblob) {
|
||||||
Util util = new Util();
|
Util util = new Util();
|
||||||
|
|
||||||
|
try {
|
||||||
|
return util.hydrateContentPackage(derblob);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
System.out.println(ex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> 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;
|
FileInputStream fis;
|
||||||
DataInputStream in;
|
DataInputStream in;
|
||||||
BufferedReader br;
|
BufferedReader br;
|
||||||
|
|
||||||
String content;
|
String content;
|
||||||
List<String> contentList;
|
List<String> contentList;
|
||||||
|
Util util = new Util();
|
||||||
|
|
||||||
for (String arg : args) {
|
|
||||||
try {
|
try {
|
||||||
fis = new FileInputStream(arg);
|
fis = new FileInputStream(filename);
|
||||||
} catch (FileNotFoundException ex) {
|
} catch (FileNotFoundException ex) {
|
||||||
System.out.printf("ERROR: failed to find file %s\n", arg);
|
System.out.printf("ERROR: failed to find file %s\n", filename);
|
||||||
continue;
|
return;
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
System.out.printf("ERROR: [%s] %s\n", arg, t);
|
System.out.printf("ERROR: [%s] %s\n", filename, t);
|
||||||
continue;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
in = new DataInputStream(fis);
|
in = new DataInputStream(fis);
|
||||||
|
@ -45,17 +150,93 @@ public class App {
|
||||||
contentList.add(content);
|
contentList.add(content);
|
||||||
}
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
System.out.printf("ERROR: [%s] - %s\n", arg, ex);
|
System.out.printf("ERROR: [%s] - %s\n", filename, ex);
|
||||||
continue;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//System.out.println(contentList.toString());
|
//System.out.println(contentList.toString());
|
||||||
|
|
||||||
PathNode root = new PathNode();
|
PathNode root = new PathNode();
|
||||||
util.makePathTree(contentList, root);
|
util.makePathTree(contentList, root);
|
||||||
|
|
||||||
Util.printTree(root, 0);
|
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) {
|
||||||
|
//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());
|
||||||
|
|
||||||
|
//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<String> contents;
|
||||||
|
|
||||||
|
dos = (DEROctetString)objectFromCertOid(arg, "1.3.6.1.4.1.2312.9.7");
|
||||||
|
try {
|
||||||
|
baos.write(dos.getOctets());
|
||||||
|
} catch (IOException ex) {
|
||||||
|
System.out.println(ex);
|
||||||
|
}
|
||||||
|
bytes = decompress(baos.toByteArray());
|
||||||
|
contents = hydrateFromBytes(bytes);
|
||||||
|
if (contents != null) {
|
||||||
|
for (String content : contents) {
|
||||||
|
System.out.println(content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//X509Certificate cert = certFromFile(arg);
|
||||||
|
//System.out.println(cert.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -521,6 +521,7 @@ public class Util {
|
||||||
pathDictionary.add(new HuffNode(HuffNode.END_NODE, weight));
|
pathDictionary.add(new HuffNode(HuffNode.END_NODE, weight));
|
||||||
HuffNode pathTrie = makeTrie(pathDictionary);
|
HuffNode pathTrie = makeTrie(pathDictionary);
|
||||||
|
|
||||||
|
// setup input stream, offset by the dictionary, to the end
|
||||||
StringBuffer nodeBits = new StringBuffer();
|
StringBuffer nodeBits = new StringBuffer();
|
||||||
ByteArrayInputStream bais = new ByteArrayInputStream(payload,
|
ByteArrayInputStream bais = new ByteArrayInputStream(payload,
|
||||||
(new Long(read)).intValue(), (new Long(payload.length - read).intValue()));
|
(new Long(read)).intValue(), (new Long(payload.length - read).intValue()));
|
||||||
|
|
Loading…
Reference in a new issue