@Override public boolean setData(final ASInputStream stream) { COSFilters filters = getFilters(); if (filters.empty()) { return setData(stream, FilterFlags.RAW_DATA); } try (InternalOutputStream fileWithData = InternalOutputStream.getInternalOutputStream()) { ASOutputStream encoder = filters.getOutputStream(fileWithData); encoder.write(stream); File encodedDataFile = fileWithData.getFile(); return setData(new InternalInputStream(encodedDataFile, true), FilterFlags.RAW_DATA); } catch (IOException e) { LOGGER.log(Level.FINE, "Can not set data", e); return false; } }
/** * Applies decryption filter to the stream so it can be read as unencrypted. * * @param stream is COSStream with encrypted data. * @param key is COSKey of this stream. */ public void decryptStream(COSStream stream, COSKey key) throws IOException, GeneralSecurityException { ASInputStream encStream = stream.getData(); ASInputStream filter; if (isRC4Decryption) { filter = new COSFilterRC4DecryptionDefault(encStream, key, this.encryptionKey); } else { filter = new COSFilterAESDecryptionDefault(encStream, key, this.encryptionKey, true, method); } document.addFileResource(new ASFileStreamCloser(filter)); stream.setData(filter, COSStream.FilterFlags.RAW_DATA); }
public void setFilters(final COSFilters filters) throws IOException { try (ASInputStream decoded = this.getData(COSStream.FilterFlags.DECODE); SeekableInputStream unfilteredData = SeekableInputStream.getSeekableStream(decoded)) { InternalOutputStream fileWithData = InternalOutputStream.getInternalOutputStream(); setKey(ASAtom.FILTER, filters.getObject()); ASOutputStream encoder = filters.getOutputStream(fileWithData); encoder.write(unfilteredData); File encodedDataFile = fileWithData.getFile(); fileWithData.close(); this.setData(new InternalInputStream(encodedDataFile, true), FilterFlags.RAW_DATA); } }