summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java46
1 files changed, 29 insertions, 17 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java b/bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java
index f247b11f..fd261787 100644
--- a/bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java
+++ b/bcprov/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java
@@ -26,15 +26,14 @@ class ConstructedOctetStream
return -1;
}
- ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject();
-
- if (s == null)
+ ASN1OctetStringParser next = getNextParser();
+ if (next == null)
{
return -1;
}
_first = false;
- _currentStream = s.getOctetStream();
+ _currentStream = next.getOctetStream();
}
int totalRead = 0;
@@ -54,15 +53,14 @@ class ConstructedOctetStream
}
else
{
- ASN1OctetStringParser aos = (ASN1OctetStringParser)_parser.readObject();
-
- if (aos == null)
+ ASN1OctetStringParser next = getNextParser();
+ if (next == null)
{
_currentStream = null;
return totalRead < 1 ? -1 : totalRead;
}
- _currentStream = aos.getOctetStream();
+ _currentStream = next.getOctetStream();
}
}
}
@@ -77,15 +75,14 @@ class ConstructedOctetStream
return -1;
}
- ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject();
-
- if (s == null)
+ ASN1OctetStringParser next = getNextParser();
+ if (next == null)
{
return -1;
}
-
+
_first = false;
- _currentStream = s.getOctetStream();
+ _currentStream = next.getOctetStream();
}
for (;;)
@@ -97,15 +94,30 @@ class ConstructedOctetStream
return b;
}
- ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject();
-
- if (s == null)
+ ASN1OctetStringParser next = getNextParser();
+ if (next == null)
{
_currentStream = null;
return -1;
}
- _currentStream = s.getOctetStream();
+ _currentStream = next.getOctetStream();
}
}
+
+ private ASN1OctetStringParser getNextParser() throws IOException
+ {
+ ASN1Encodable asn1Obj = _parser.readObject();
+ if (asn1Obj == null)
+ {
+ return null;
+ }
+
+ if (asn1Obj instanceof ASN1OctetStringParser)
+ {
+ return (ASN1OctetStringParser)asn1Obj;
+ }
+
+ throw new IOException("unknown object encountered: " + asn1Obj.getClass());
+ }
}