private byte[] nextChunk() throws GeneralSecurityException, IOException { int index = (int)(_pos >> 12); byte[] blockKey = new byte[4]; LittleEndian.putInt(blockKey, 0, index); byte[] iv = generateIv(_info.getHeader().getAlgorithm(), _info.getHeader().getKeySalt(), blockKey); _cipher.init(Cipher.DECRYPT_MODE, _secretKey, new IvParameterSpec(iv)); if (_lastIndex != index) _stream.skip((index - _lastIndex) << 12); byte[] block = new byte[Math.min(_stream.available(), 4096)]; _stream.readFully(block); _lastIndex = index + 1; return _cipher.doFinal(block); } }
private byte[] nextChunk() throws GeneralSecurityException, IOException { int index = (int)(_pos >> 12); byte[] blockKey = new byte[4]; LittleEndian.putInt(blockKey, 0, index); byte[] iv = generateIv(_info.getHeader().getAlgorithm(), _info.getHeader().getKeySalt(), blockKey); _cipher.init(Cipher.DECRYPT_MODE, _secretKey, new IvParameterSpec(iv)); if (_lastIndex != index) _stream.skip((index - _lastIndex) << 12); byte[] block = new byte[Math.min(_stream.available(), 4096)]; _stream.readFully(block); _lastIndex = index + 1; return _cipher.doFinal(block); } }
public ChunkedCipherInputStream(DocumentInputStream stream, long size) throws GeneralSecurityException { _size = size; _stream = stream; _cipher = getCipher(_info.getHeader().getAlgorithm(), _info.getHeader().getCipherMode(), _secretKey, _info.getHeader().getKeySalt()); }
public ChunkedCipherInputStream(DocumentInputStream stream, long size) throws GeneralSecurityException { _size = size; _stream = stream; _cipher = getCipher(_info.getHeader().getAlgorithm(), _info.getHeader().getCipherMode(), _secretKey, _info.getHeader().getKeySalt()); }
public EncryptionInfo(DirectoryNode dir) throws IOException { DocumentInputStream dis = dir.createDocumentInputStream("EncryptionInfo"); versionMajor = dis.readShort(); versionMinor = dis.readShort(); encryptionFlags = dis.readInt(); if (versionMajor == 4 && versionMinor == 4 && encryptionFlags == 0x40) { StringBuilder builder = new StringBuilder(); byte[] xmlDescriptor = new byte[dis.available()]; dis.read(xmlDescriptor); for (byte b : xmlDescriptor) builder.append((char)b); String descriptor = builder.toString(); header = new EncryptionHeader(descriptor); verifier = new EncryptionVerifier(descriptor); } else { int hSize = dis.readInt(); header = new EncryptionHeader(dis); if (header.getAlgorithm()==EncryptionHeader.ALGORITHM_RC4) { verifier = new EncryptionVerifier(dis, 20); } else { verifier = new EncryptionVerifier(dis, 32); } } }
public EncryptionInfo(DirectoryNode dir) throws IOException { DocumentInputStream dis = dir.createDocumentInputStream("EncryptionInfo"); versionMajor = dis.readShort(); versionMinor = dis.readShort(); encryptionFlags = dis.readInt(); if (versionMajor == 4 && versionMinor == 4 && encryptionFlags == 0x40) { StringBuilder builder = new StringBuilder(); byte[] xmlDescriptor = new byte[dis.available()]; dis.read(xmlDescriptor); for (byte b : xmlDescriptor) builder.append((char)b); String descriptor = builder.toString(); header = new EncryptionHeader(descriptor); verifier = new EncryptionVerifier(descriptor); } else { int hSize = dis.readInt(); header = new EncryptionHeader(dis); if (header.getAlgorithm()==EncryptionHeader.ALGORITHM_RC4) { verifier = new EncryptionVerifier(dis, 20); } else { verifier = new EncryptionVerifier(dis, 32); } } }