From 6bd5b2345c7b40658fed9e44bab883c83e966bc1 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Tue, 9 Feb 2021 18:23:48 +0100 Subject: [PATCH] Small refactoring code --- .../database/file/output/DatabaseOutputKDB.kt | 6 +- .../database/file/output/EntryOutputKDB.kt | 72 +++++++++---------- .../database/file/output/GroupOutputKDB.kt | 60 ++++++++-------- .../keepass/utils/StringDatabaseKDBUtils.kt | 12 ++-- 4 files changed, 73 insertions(+), 77 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDB.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDB.kt index a9ccdea30..25db9de6d 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDB.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/output/DatabaseOutputKDB.kt @@ -215,10 +215,10 @@ class DatabaseOutputKDB(private val mDatabaseKDB: DatabaseKDB, mDatabaseKDB.doForEachGroupInIndex { group -> GroupOutputKDB.write(outputStream, group) } + val binaryCipherKey = mDatabaseKDB.loadedCipherKey + ?: throw DatabaseOutputException("Unable to retrieve cipher key to write binaries") mDatabaseKDB.doForEachEntryInIndex { entry -> - val binaryCipherKey = mDatabaseKDB.loadedCipherKey - ?: throw DatabaseOutputException("Unable to retrieve cipher key to write binaries") - EntryOutputKDB.writeEntry(outputStream, entry, binaryCipherKey) + EntryOutputKDB.write(outputStream, entry, binaryCipherKey) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/output/EntryOutputKDB.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/output/EntryOutputKDB.kt index 7f667e6de..d8583f913 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/output/EntryOutputKDB.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/output/EntryOutputKDB.kt @@ -36,81 +36,80 @@ class EntryOutputKDB { companion object { @Throws(DatabaseOutputException::class) - fun writeEntry(mOutputStream: OutputStream, - mEntry: EntryKDB, - binaryCipherKey: Database.LoadedKey) { + fun write(outputStream: OutputStream, + entry: EntryKDB, + binaryCipherKey: Database.LoadedKey) { //NOTE: Need be to careful about using ints. The actual type written to file is a unsigned int try { // UUID - mOutputStream.write(UUID_FIELD_TYPE) - mOutputStream.write(UUID_FIELD_SIZE) - mOutputStream.write(uuidTo16Bytes(mEntry.id)) + outputStream.write(UUID_FIELD_TYPE) + outputStream.write(UUID_FIELD_SIZE) + outputStream.write(uuidTo16Bytes(entry.id)) // Group ID - mOutputStream.write(GROUPID_FIELD_TYPE) - mOutputStream.write(GROUPID_FIELD_SIZE) - mOutputStream.write(uIntTo4Bytes(UnsignedInt(mEntry.parent!!.id))) + outputStream.write(GROUPID_FIELD_TYPE) + outputStream.write(GROUPID_FIELD_SIZE) + outputStream.write(uIntTo4Bytes(UnsignedInt(entry.parent!!.id))) // Image ID - mOutputStream.write(IMAGEID_FIELD_TYPE) - mOutputStream.write(IMAGEID_FIELD_SIZE) - mOutputStream.write(uIntTo4Bytes(UnsignedInt(mEntry.icon.iconId))) + outputStream.write(IMAGEID_FIELD_TYPE) + outputStream.write(IMAGEID_FIELD_SIZE) + outputStream.write(uIntTo4Bytes(UnsignedInt(entry.icon.iconId))) // Title - //byte[] title = mEntry.title.getBytes("UTF-8"); - mOutputStream.write(TITLE_FIELD_TYPE) - StringDatabaseKDBUtils.writeStringToBytes(mEntry.title, mOutputStream) + outputStream.write(TITLE_FIELD_TYPE) + StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.title) // URL - mOutputStream.write(URL_FIELD_TYPE) - StringDatabaseKDBUtils.writeStringToBytes(mEntry.url, mOutputStream) + outputStream.write(URL_FIELD_TYPE) + StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.url) // Username - mOutputStream.write(USERNAME_FIELD_TYPE) - StringDatabaseKDBUtils.writeStringToBytes(mEntry.username, mOutputStream) + outputStream.write(USERNAME_FIELD_TYPE) + StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.username) // Password - mOutputStream.write(PASSWORD_FIELD_TYPE) - writePassword(mOutputStream, mEntry.password) + outputStream.write(PASSWORD_FIELD_TYPE) + writePassword(outputStream, entry.password) // Additional - mOutputStream.write(ADDITIONAL_FIELD_TYPE) - StringDatabaseKDBUtils.writeStringToBytes(mEntry.notes, mOutputStream) + outputStream.write(ADDITIONAL_FIELD_TYPE) + StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.notes) // Create date - writeDate(mOutputStream, CREATE_FIELD_TYPE, dateTo5Bytes(mEntry.creationTime.date)) + writeDate(outputStream, CREATE_FIELD_TYPE, dateTo5Bytes(entry.creationTime.date)) // Modification date - writeDate(mOutputStream, MOD_FIELD_TYPE, dateTo5Bytes(mEntry.lastModificationTime.date)) + writeDate(outputStream, MOD_FIELD_TYPE, dateTo5Bytes(entry.lastModificationTime.date)) // Access date - writeDate(mOutputStream, ACCESS_FIELD_TYPE, dateTo5Bytes(mEntry.lastAccessTime.date)) + writeDate(outputStream, ACCESS_FIELD_TYPE, dateTo5Bytes(entry.lastAccessTime.date)) // Expiration date - writeDate(mOutputStream, EXPIRE_FIELD_TYPE, dateTo5Bytes(mEntry.expiryTime.date)) + writeDate(outputStream, EXPIRE_FIELD_TYPE, dateTo5Bytes(entry.expiryTime.date)) // Binary description - mOutputStream.write(BINARY_DESC_FIELD_TYPE) - StringDatabaseKDBUtils.writeStringToBytes(mEntry.binaryDescription, mOutputStream) + outputStream.write(BINARY_DESC_FIELD_TYPE) + StringDatabaseKDBUtils.writeStringToStream(outputStream, entry.binaryDescription) // Binary - mOutputStream.write(BINARY_DATA_FIELD_TYPE) - val binaryData = mEntry.binaryData + outputStream.write(BINARY_DATA_FIELD_TYPE) + val binaryData = entry.binaryData val binaryDataLength = binaryData?.length ?: 0L // Write data length - mOutputStream.write(uIntTo4Bytes(UnsignedInt.fromKotlinLong(binaryDataLength))) + outputStream.write(uIntTo4Bytes(UnsignedInt.fromKotlinLong(binaryDataLength))) // Write data if (binaryDataLength > 0) { binaryData?.getInputDataStream(binaryCipherKey).use { inputStream -> inputStream?.readAllBytes { buffer -> - mOutputStream.write(buffer) + outputStream.write(buffer) } } } // End - mOutputStream.write(END_FIELD_TYPE) - mOutputStream.write(ZERO_FIELD_SIZE) + outputStream.write(END_FIELD_TYPE) + outputStream.write(ZERO_FIELD_SIZE) } catch (e: IOException) { throw DatabaseOutputException("Failed to output an entry.", e) } @@ -156,13 +155,10 @@ class EntryOutputKDB { private val BINARY_DATA_FIELD_TYPE:ByteArray = uShortTo2Bytes(14) private val END_FIELD_TYPE:ByteArray = uShortTo2Bytes(0xFFFF) - private val LONG_FOUR:ByteArray = uIntTo4Bytes(UnsignedInt(4)) private val UUID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(16)) private val GROUPID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4)) private val DATE_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(5)) private val IMAGEID_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4)) - private val LEVEL_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4)) - private val FLAGS_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(4)) private val ZERO_FIELD_SIZE:ByteArray = uIntTo4Bytes(UnsignedInt(0)) private val ZERO_FIVE:ByteArray = byteArrayOf(0x00, 0x00, 0x00, 0x00, 0x00) } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/file/output/GroupOutputKDB.kt b/app/src/main/java/com/kunzisoft/keepass/database/file/output/GroupOutputKDB.kt index 0d95a6722..82b3487e0 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/file/output/GroupOutputKDB.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/file/output/GroupOutputKDB.kt @@ -36,57 +36,57 @@ class GroupOutputKDB { companion object { @Throws(DatabaseOutputException::class) - fun write(mOutputStream: OutputStream, - mGroup: GroupKDB) { + fun write(outputStream: OutputStream, + group: GroupKDB) { //NOTE: Need be to careful about using ints. The actual type written to file is a unsigned int, but most values can't be greater than 2^31, so it probably doesn't matter. try { // Group ID - mOutputStream.write(GROUPID_FIELD_TYPE) - mOutputStream.write(GROUPID_FIELD_SIZE) - mOutputStream.write(uIntTo4Bytes(UnsignedInt(mGroup.id))) + outputStream.write(GROUPID_FIELD_TYPE) + outputStream.write(GROUPID_FIELD_SIZE) + outputStream.write(uIntTo4Bytes(UnsignedInt(group.id))) // Name - mOutputStream.write(NAME_FIELD_TYPE) - StringDatabaseKDBUtils.writeStringToBytes(mGroup.title, mOutputStream) + outputStream.write(NAME_FIELD_TYPE) + StringDatabaseKDBUtils.writeStringToStream(outputStream, group.title) // Create date - mOutputStream.write(CREATE_FIELD_TYPE) - mOutputStream.write(DATE_FIELD_SIZE) - mOutputStream.write(dateTo5Bytes(mGroup.creationTime.date)) + outputStream.write(CREATE_FIELD_TYPE) + outputStream.write(DATE_FIELD_SIZE) + outputStream.write(dateTo5Bytes(group.creationTime.date)) // Modification date - mOutputStream.write(MOD_FIELD_TYPE) - mOutputStream.write(DATE_FIELD_SIZE) - mOutputStream.write(dateTo5Bytes(mGroup.lastModificationTime.date)) + outputStream.write(MOD_FIELD_TYPE) + outputStream.write(DATE_FIELD_SIZE) + outputStream.write(dateTo5Bytes(group.lastModificationTime.date)) // Access date - mOutputStream.write(ACCESS_FIELD_TYPE) - mOutputStream.write(DATE_FIELD_SIZE) - mOutputStream.write(dateTo5Bytes(mGroup.lastAccessTime.date)) + outputStream.write(ACCESS_FIELD_TYPE) + outputStream.write(DATE_FIELD_SIZE) + outputStream.write(dateTo5Bytes(group.lastAccessTime.date)) // Expiration date - mOutputStream.write(EXPIRE_FIELD_TYPE) - mOutputStream.write(DATE_FIELD_SIZE) - mOutputStream.write(dateTo5Bytes(mGroup.expiryTime.date)) + outputStream.write(EXPIRE_FIELD_TYPE) + outputStream.write(DATE_FIELD_SIZE) + outputStream.write(dateTo5Bytes(group.expiryTime.date)) // Image ID - mOutputStream.write(IMAGEID_FIELD_TYPE) - mOutputStream.write(IMAGEID_FIELD_SIZE) - mOutputStream.write(uIntTo4Bytes(UnsignedInt(mGroup.icon.iconId))) + outputStream.write(IMAGEID_FIELD_TYPE) + outputStream.write(IMAGEID_FIELD_SIZE) + outputStream.write(uIntTo4Bytes(UnsignedInt(group.icon.iconId))) // Level - mOutputStream.write(LEVEL_FIELD_TYPE) - mOutputStream.write(LEVEL_FIELD_SIZE) - mOutputStream.write(uShortTo2Bytes(mGroup.level)) + outputStream.write(LEVEL_FIELD_TYPE) + outputStream.write(LEVEL_FIELD_SIZE) + outputStream.write(uShortTo2Bytes(group.level)) // Flags - mOutputStream.write(FLAGS_FIELD_TYPE) - mOutputStream.write(FLAGS_FIELD_SIZE) - mOutputStream.write(uIntTo4Bytes(UnsignedInt(mGroup.groupFlags))) + outputStream.write(FLAGS_FIELD_TYPE) + outputStream.write(FLAGS_FIELD_SIZE) + outputStream.write(uIntTo4Bytes(UnsignedInt(group.groupFlags))) // End - mOutputStream.write(END_FIELD_TYPE) - mOutputStream.write(ZERO_FIELD_SIZE) + outputStream.write(END_FIELD_TYPE) + outputStream.write(ZERO_FIELD_SIZE) } catch (e: IOException) { throw DatabaseOutputException("Failed to output a group", e) } diff --git a/app/src/main/java/com/kunzisoft/keepass/utils/StringDatabaseKDBUtils.kt b/app/src/main/java/com/kunzisoft/keepass/utils/StringDatabaseKDBUtils.kt index 611e97b34..229487c8c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/utils/StringDatabaseKDBUtils.kt +++ b/app/src/main/java/com/kunzisoft/keepass/utils/StringDatabaseKDBUtils.kt @@ -53,12 +53,12 @@ object StringDatabaseKDBUtils { } @Throws(IOException::class) - fun writeStringToBytes(string: String?, os: OutputStream): Int { + fun writeStringToStream(outputStream: OutputStream, string: String?): Int { var str = string if (str == null) { // Write out a null character - os.write(uIntTo4Bytes(UnsignedInt(1))) - os.write(0x00) + outputStream.write(uIntTo4Bytes(UnsignedInt(1))) + outputStream.write(0x00) return 0 } @@ -69,9 +69,9 @@ object StringDatabaseKDBUtils { val initial = str.toByteArray(defaultCharset) val length = initial.size + 1 - os.write(uIntTo4Bytes(UnsignedInt(length))) - os.write(initial) - os.write(0x00) + outputStream.write(uIntTo4Bytes(UnsignedInt(length))) + outputStream.write(initial) + outputStream.write(0x00) return length }