Package com.unboundid.util
Class PassphraseEncryptedInputStream
java.lang.Object
java.io.InputStream
com.unboundid.util.PassphraseEncryptedInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable
@ThreadSafety(level=NOT_THREADSAFE)
public final class PassphraseEncryptedInputStream
extends InputStream
This class provides an
InputStream implementation that can read
encrypted data written by the PassphraseEncryptedOutputStream. It
will use a provided password in conjunction with a
PassphraseEncryptedStreamHeader that will either be read from the
beginning of the stream or provided in the constructor.-
Constructor Summary
ConstructorsConstructorDescriptionPassphraseEncryptedInputStream(char[] passphrase, InputStream wrappedInputStream) Creates a new passphrase-encrypted input stream that will read thePassphraseEncryptedStreamHeaderfrom the underlying input stream.PassphraseEncryptedInputStream(InputStream wrappedInputStream, PassphraseEncryptedStreamHeader encryptionHeader) Creates a new passphrase-encrypted input stream using the provided information.PassphraseEncryptedInputStream(String passphrase, InputStream wrappedInputStream) Creates a new passphrase-encrypted input stream that will read thePassphraseEncryptedStreamHeaderfrom the underlying input stream. -
Method Summary
Modifier and TypeMethodDescriptionintRetrieves an estimate of the number of decrypted byte that are available to read from the underlying stream without blocking.voidclose()Closes this input stream and the underlying stream.Retrieves an encryption header with details about the encryption used when the data was originally written.voidmark(int readLimit) Marks the current position in this input stream so that the caller may return to that spot (and re-read the data) using thereset()method.booleanintread()Retrieves a single byte of decrypted data read from the underlying input stream.intread(byte[] b) Reads decrypted data and writes it into the provided byte array.intread(byte[] b, int offset, int length) Reads decrypted data and writes it into the specified portion of the provided byte array.voidreset()Attempts to reset the position of this input stream to the position of the last call tomark(int).longskip(long maxBytesToSkip) Skips over and discards up to the specified number of bytes of decrypted data obtained from the underlying input stream.Methods inherited from class java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
Constructor Details
-
PassphraseEncryptedInputStream
public PassphraseEncryptedInputStream(@NotNull String passphrase, @NotNull InputStream wrappedInputStream) throws IOException, LDAPException, InvalidKeyException, GeneralSecurityException Creates a new passphrase-encrypted input stream that will read thePassphraseEncryptedStreamHeaderfrom the underlying input stream.- Parameters:
passphrase- The passphrase used to generate the encryption key when the correspondingPassphraseEncryptedOutputStreamwas created.wrappedInputStream- The input stream from which the encryption header and encrypted data will be read.- Throws:
IOException- If a problem is encountered while trying to read the encryption header from the provided input stream.LDAPException- If s problem is encountered while trying to parse the encryption header read from the provided input stream.InvalidKeyException- If the MAC contained in the header does not match the expected value.GeneralSecurityException- If a problem occurs while attempting to initialize the decryption.
-
PassphraseEncryptedInputStream
public PassphraseEncryptedInputStream(@NotNull char[] passphrase, @NotNull InputStream wrappedInputStream) throws IOException, LDAPException, InvalidKeyException, GeneralSecurityException Creates a new passphrase-encrypted input stream that will read thePassphraseEncryptedStreamHeaderfrom the underlying input stream.- Parameters:
passphrase- The passphrase used to generate the encryption key when the correspondingPassphraseEncryptedOutputStreamwas created.wrappedInputStream- The input stream from which the encryption header and encrypted data will be read.- Throws:
IOException- If a problem is encountered while trying to read the encryption header from the provided input stream.LDAPException- If s problem is encountered while trying to parse the encryption header read from the provided input stream.InvalidKeyException- If the MAC contained in the header does not match the expected value.GeneralSecurityException- If a problem occurs while attempting to initialize the decryption.
-
PassphraseEncryptedInputStream
public PassphraseEncryptedInputStream(@NotNull InputStream wrappedInputStream, @NotNull PassphraseEncryptedStreamHeader encryptionHeader) throws GeneralSecurityException Creates a new passphrase-encrypted input stream using the provided information.- Parameters:
wrappedInputStream- The input stream from which the encrypted data will be read.encryptionHeader- The encryption header with the information needed (in conjunction with the given passphrase) to decrypt the data read from the provided input stream.- Throws:
GeneralSecurityException- If a problem occurs while attempting to initialize the decryption.
-
-
Method Details
-
read
Retrieves a single byte of decrypted data read from the underlying input stream.- Specified by:
readin classInputStream- Returns:
- A value that is between 0 and 255 representing the byte that was read, or -1 to indicate that the end of the input stream has been reached.
- Throws:
IOException- If a problem is encountered while reading or decrypting the data.
-
read
Reads decrypted data and writes it into the provided byte array.- Overrides:
readin classInputStream- Parameters:
b- The byte array into which the decrypted data will be placed, starting with an index of zero. It must not benullor empty.- Returns:
- The number of bytes added to the provided buffer, or -1 if the end of the input stream has been reached and there is no more data to read.
- Throws:
IOException- If a problem is encountered while reading or decrypting the data.
-
read
Reads decrypted data and writes it into the specified portion of the provided byte array.- Overrides:
readin classInputStream- Parameters:
b- The byte array into which the decrypted data will be placed. It must not benullor empty.offset- The position in the provided array at which to begin adding the decrypted data. It must be greater than or equal to zero and less than the length of the provided array.length- The maximum number of bytes to be added to the given array. This must be greater than zero, and the sum of theoffsetandlengthmust be less than or equal to the length of the provided array.- Returns:
- The number of bytes added to the provided buffer, or -1 if the end of the input stream has been reached and there is no more data to read.
- Throws:
IOException- If a problem is encountered while reading or decrypting the data.
-
skip
Skips over and discards up to the specified number of bytes of decrypted data obtained from the underlying input stream.- Overrides:
skipin classInputStream- Parameters:
maxBytesToSkip- The maximum number of bytes to skip.- Returns:
- The number of bytes that were actually skipped.
- Throws:
IOException- If a problem is encountered while skipping data from the stream.
-
available
Retrieves an estimate of the number of decrypted byte that are available to read from the underlying stream without blocking. Note that some implementations always return a value of zero, so a return value of zero does not necessarily mean that there is no data available to read.- Overrides:
availablein classInputStream- Returns:
- An estimate of the number of decrypted bytes that are available to read from the underlying stream without blocking.
- Throws:
IOException- If a problem is encountered while attempting to determine the number of bytes available to read.
-
close
Closes this input stream and the underlying stream.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classInputStream- Throws:
IOException- If a problem is encountered while closing the stream.
-
markSupported
- Overrides:
markSupportedin classInputStream- Returns:
trueif this input stream supports themarkandresetmethods, orfalseif not.
-
mark
Marks the current position in this input stream so that the caller may return to that spot (and re-read the data) using thereset()method. Use themarkSupported()method to determine whether this feature is supported for this input stream.- Overrides:
markin classInputStream- Parameters:
readLimit- The maximum number of bytes expected to be read between the mark and the call to theresetmethod.
-
reset
Attempts to reset the position of this input stream to the position of the last call tomark(int). Use themarkSupported()method to determine whether this feature is supported for ths input stream.- Overrides:
resetin classInputStream- Throws:
IOException- If a problem is encountered while performing the reset (e.g., no mark has been set, if too much data has been read since setting the mark, or if themarkandresetmethods are not supported).
-
getEncryptionHeader
Retrieves an encryption header with details about the encryption used when the data was originally written.- Returns:
- An encryption header with details about the encryption used when the data was originally written.
-