diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-06-20 07:07:07 +0400 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-06-20 07:07:07 +0400 |
commit | f5afa59158cea442fedd96403cf1630f5df5b30f (patch) | |
tree | d98fb95b53e48b3bf348df78301cfe45d1511d7b /core/src/main/java/org/bouncycastle/crypto/tls/Certificate.java | |
parent | 6e5aa7a85ff3814ce64cc12baaa187ee77e76209 (diff) |
Rewrite parse method
Diffstat (limited to 'core/src/main/java/org/bouncycastle/crypto/tls/Certificate.java')
-rw-r--r-- | core/src/main/java/org/bouncycastle/crypto/tls/Certificate.java | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/core/src/main/java/org/bouncycastle/crypto/tls/Certificate.java b/core/src/main/java/org/bouncycastle/crypto/tls/Certificate.java index 867f16e2..867cf97d 100644 --- a/core/src/main/java/org/bouncycastle/crypto/tls/Certificate.java +++ b/core/src/main/java/org/bouncycastle/crypto/tls/Certificate.java @@ -1,5 +1,6 @@ package org.bouncycastle.crypto.tls; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -111,27 +112,28 @@ public class Certificate public static Certificate parse(InputStream input) throws IOException { - int left = TlsUtils.readUint24(input); - if (left == 0) + int totalLength = TlsUtils.readUint24(input); + if (totalLength == 0) { return EMPTY_CHAIN; } - Vector tmp = new Vector(); - while (left > 0) - { - int size = TlsUtils.readUint24(input); - left -= 3 + size; + byte[] certListData = TlsUtils.readFully(totalLength, input); + + ByteArrayInputStream buf = new ByteArrayInputStream(certListData); - byte[] derEncoding = TlsUtils.readFully(size, input); - ASN1Primitive asn1 = TlsUtils.readASN1Object(derEncoding); - tmp.addElement(org.bouncycastle.asn1.x509.Certificate.getInstance(asn1)); + Vector certificate_list = new Vector(); + while (buf.available() > 0) + { + byte[] derEncoding = TlsUtils.readOpaque24(buf); + ASN1Primitive asn1Cert = TlsUtils.readASN1Object(derEncoding); + certificate_list.addElement(org.bouncycastle.asn1.x509.Certificate.getInstance(asn1Cert)); } - org.bouncycastle.asn1.x509.Certificate[] certificateList = new org.bouncycastle.asn1.x509.Certificate[tmp.size()]; - for (int i = 0; i < tmp.size(); i++) + org.bouncycastle.asn1.x509.Certificate[] certificateList = new org.bouncycastle.asn1.x509.Certificate[certificate_list.size()]; + for (int i = 0; i < certificate_list.size(); i++) { - certificateList[i] = (org.bouncycastle.asn1.x509.Certificate)tmp.elementAt(i); + certificateList[i] = (org.bouncycastle.asn1.x509.Certificate)certificate_list.elementAt(i); } return new Certificate(certificateList); } |