mirror of
https://github.com/oxen-io/session-android.git
synced 2023-12-14 02:53:01 +01:00
111 lines
2.4 KiB
Java
111 lines
2.4 KiB
Java
package org.thoughtcrime.bouncycastle.asn1;
|
|
|
|
import java.io.InputStream;
|
|
import java.io.IOException;
|
|
|
|
class ConstructedOctetStream
|
|
extends InputStream
|
|
{
|
|
private final ASN1StreamParser _parser;
|
|
|
|
private boolean _first = true;
|
|
private InputStream _currentStream;
|
|
|
|
ConstructedOctetStream(
|
|
ASN1StreamParser parser)
|
|
{
|
|
_parser = parser;
|
|
}
|
|
|
|
public int read(byte[] b, int off, int len) throws IOException
|
|
{
|
|
if (_currentStream == null)
|
|
{
|
|
if (!_first)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject();
|
|
|
|
if (s == null)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
_first = false;
|
|
_currentStream = s.getOctetStream();
|
|
}
|
|
|
|
int totalRead = 0;
|
|
|
|
for (;;)
|
|
{
|
|
int numRead = _currentStream.read(b, off + totalRead, len - totalRead);
|
|
|
|
if (numRead >= 0)
|
|
{
|
|
totalRead += numRead;
|
|
|
|
if (totalRead == len)
|
|
{
|
|
return totalRead;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ASN1OctetStringParser aos = (ASN1OctetStringParser)_parser.readObject();
|
|
|
|
if (aos == null)
|
|
{
|
|
_currentStream = null;
|
|
return totalRead < 1 ? -1 : totalRead;
|
|
}
|
|
|
|
_currentStream = aos.getOctetStream();
|
|
}
|
|
}
|
|
}
|
|
|
|
public int read()
|
|
throws IOException
|
|
{
|
|
if (_currentStream == null)
|
|
{
|
|
if (!_first)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject();
|
|
|
|
if (s == null)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
_first = false;
|
|
_currentStream = s.getOctetStream();
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
int b = _currentStream.read();
|
|
|
|
if (b >= 0)
|
|
{
|
|
return b;
|
|
}
|
|
|
|
ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject();
|
|
|
|
if (s == null)
|
|
{
|
|
_currentStream = null;
|
|
return -1;
|
|
}
|
|
|
|
_currentStream = s.getOctetStream();
|
|
}
|
|
}
|
|
}
|