Package org.pgpainless.util
Class CRCingArmoredInputStreamWrapper
- java.lang.Object
-
- java.io.InputStream
-
- org.bouncycastle.bcpg.ArmoredInputStream
-
- org.pgpainless.util.CRCingArmoredInputStreamWrapper
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
public class CRCingArmoredInputStreamWrapper extends org.bouncycastle.bcpg.ArmoredInputStream
Utility class that causes read(bytes, offset, length) to properly throw exceptions caused by faulty CRC checksums. Furthermore, this class swallows exceptions from BC's ArmoredInputStream that are caused by missing CRC checksums.
-
-
Constructor Summary
Constructors Constructor Description CRCingArmoredInputStreamWrapper(org.bouncycastle.bcpg.ArmoredInputStream inputStream)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description int
available()
void
close()
String
getArmorHeaderLine()
String[]
getArmorHeaders()
boolean
isClearText()
boolean
isEndOfStream()
void
mark(int readlimit)
boolean
markSupported()
static InputStream
possiblyWrap(InputStream inputStream)
int
read()
int
read(byte[] b)
int
read(byte[] b, int off, int len)
Reads up tolen
bytes of data from the input stream into an array of bytes.void
reset()
long
skip(long n)
-
-
-
Constructor Detail
-
CRCingArmoredInputStreamWrapper
public CRCingArmoredInputStreamWrapper(org.bouncycastle.bcpg.ArmoredInputStream inputStream) throws IOException
- Throws:
IOException
-
-
Method Detail
-
possiblyWrap
public static InputStream possiblyWrap(InputStream inputStream) throws IOException
- Throws:
IOException
-
isClearText
public boolean isClearText()
- Overrides:
isClearText
in classorg.bouncycastle.bcpg.ArmoredInputStream
-
isEndOfStream
public boolean isEndOfStream()
- Overrides:
isEndOfStream
in classorg.bouncycastle.bcpg.ArmoredInputStream
-
getArmorHeaderLine
public String getArmorHeaderLine()
- Overrides:
getArmorHeaderLine
in classorg.bouncycastle.bcpg.ArmoredInputStream
-
getArmorHeaders
public String[] getArmorHeaders()
- Overrides:
getArmorHeaders
in classorg.bouncycastle.bcpg.ArmoredInputStream
-
read
public int read() throws IOException
- Overrides:
read
in classorg.bouncycastle.bcpg.ArmoredInputStream
- Throws:
IOException
-
read
public int read(@Nonnull byte[] b) throws IOException
- Overrides:
read
in classInputStream
- Throws:
IOException
-
read
public int read(byte[] b, int off, int len) throws IOException
Reads up tolen
bytes of data from the input stream into an array of bytes. An attempt is made to read as many aslen
bytes, but a smaller number may be read. The number of bytes actually read is returned as an integer. The first byte read is stored into elementb[off]
, the next one intob[off+1]
, and so on. The number of bytes read is, at most, equal tolen
. NOTE: We need to override the custom behavior of Java'sInputStream.read(byte[], int, int)
, as the upstream method silently swallowsIOExceptions
. This would cause CRC checksum errors to go unnoticed.- Overrides:
read
in classorg.bouncycastle.bcpg.ArmoredInputStream
- Parameters:
b
- byte arrayoff
- offset at which we start writing data to the arraylen
- number of bytes we write into the array- Returns:
- total number of bytes read into the buffer
- Throws:
IOException
- if an exception happens AT ANY POINT- See Also:
- Related BC bug report
-
skip
public long skip(long n) throws IOException
- Overrides:
skip
in classInputStream
- Throws:
IOException
-
available
public int available() throws IOException
- Overrides:
available
in classorg.bouncycastle.bcpg.ArmoredInputStream
- Throws:
IOException
-
close
public void close() throws IOException
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classorg.bouncycastle.bcpg.ArmoredInputStream
- Throws:
IOException
-
mark
public void mark(int readlimit)
- Overrides:
mark
in classInputStream
-
reset
public void reset() throws IOException
- Overrides:
reset
in classInputStream
- Throws:
IOException
-
markSupported
public boolean markSupported()
- Overrides:
markSupported
in classInputStream
-
-