Add writeByte method in LittleEndianDataOutputStream

This commit is contained in:
J-Jamet
2020-09-25 19:34:02 +02:00
parent 81969de76e
commit 2c669deae5
2 changed files with 11 additions and 7 deletions

View File

@@ -24,7 +24,6 @@ import com.kunzisoft.keepass.database.element.database.DatabaseKDBX.Companion.BU
import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX
import com.kunzisoft.keepass.stream.LittleEndianDataOutputStream import com.kunzisoft.keepass.stream.LittleEndianDataOutputStream
import com.kunzisoft.keepass.stream.readBytes import com.kunzisoft.keepass.stream.readBytes
import com.kunzisoft.keepass.stream.uIntTo4Bytes
import com.kunzisoft.keepass.utils.UnsignedInt import com.kunzisoft.keepass.utils.UnsignedInt
import java.io.IOException import java.io.IOException
import java.io.OutputStream import java.io.OutputStream
@@ -38,14 +37,14 @@ class DatabaseInnerHeaderOutputKDBX(private val database: DatabaseKDBX,
@Throws(IOException::class) @Throws(IOException::class)
fun output() { fun output() {
dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.InnerRandomStreamID.toInt()) dataOutputStream.writeByte(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.InnerRandomStreamID)
dataOutputStream.writeInt(4) dataOutputStream.writeInt(4)
if (header.innerRandomStream == null) if (header.innerRandomStream == null)
throw IOException("Can't write innerRandomStream") throw IOException("Can't write innerRandomStream")
dataOutputStream.writeInt(header.innerRandomStream!!.id.toKotlinInt()) dataOutputStream.writeInt(header.innerRandomStream!!.id.toKotlinInt())
val streamKeySize = header.innerRandomStreamKey.size val streamKeySize = header.innerRandomStreamKey.size
dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.InnerRandomstreamKey.toInt()) dataOutputStream.writeByte(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.InnerRandomstreamKey)
dataOutputStream.writeInt(streamKeySize) dataOutputStream.writeInt(streamKeySize)
dataOutputStream.write(header.innerRandomStreamKey) dataOutputStream.write(header.innerRandomStreamKey)
@@ -54,15 +53,15 @@ class DatabaseInnerHeaderOutputKDBX(private val database: DatabaseKDBX,
// Force decompression to add binary in header // Force decompression to add binary in header
protectedBinary.decompress() protectedBinary.decompress()
// Write type binary // Write type binary
dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.Binary.toInt()) dataOutputStream.writeByte(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.Binary)
// Write size // Write size
dataOutputStream.write(uIntTo4Bytes(UnsignedInt.fromKotlinLong(protectedBinary.length() + 1))) dataOutputStream.writeUInt(UnsignedInt.fromKotlinLong(protectedBinary.length() + 1))
// Write protected flag // Write protected flag
var flag = DatabaseHeaderKDBX.KdbxBinaryFlags.None var flag = DatabaseHeaderKDBX.KdbxBinaryFlags.None
if (protectedBinary.isProtected) { if (protectedBinary.isProtected) {
flag = flag or DatabaseHeaderKDBX.KdbxBinaryFlags.Protected flag = flag or DatabaseHeaderKDBX.KdbxBinaryFlags.Protected
} }
dataOutputStream.write(flag.toInt()) dataOutputStream.writeByte(flag)
protectedBinary.getInputDataStream().use { inputStream -> protectedBinary.getInputDataStream().use { inputStream ->
inputStream.readBytes(BUFFER_SIZE_BYTES) { buffer -> inputStream.readBytes(BUFFER_SIZE_BYTES) { buffer ->
@@ -71,7 +70,7 @@ class DatabaseInnerHeaderOutputKDBX(private val database: DatabaseKDBX,
} }
} }
dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.EndOfHeader.toInt()) dataOutputStream.writeByte(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.EndOfHeader)
dataOutputStream.writeInt(0) dataOutputStream.writeInt(0)
} }
} }

View File

@@ -60,6 +60,11 @@ class LittleEndianDataOutputStream(private val baseStream: OutputStream) : Outpu
baseStream.write(oneByte) baseStream.write(oneByte)
} }
@Throws(IOException::class)
fun writeByte(byte: Byte) {
baseStream.write(byte.toInt())
}
@Throws(IOException::class) @Throws(IOException::class)
fun writeLong(value: Long) { fun writeLong(value: Long) {
baseStream.write(longTo8Bytes(value)) baseStream.write(longTo8Bytes(value))