From d247e0b0a96c0a0feae7f3cb61de9227b9a4e789 Mon Sep 17 00:00:00 2001 From: Behzod Halil Date: Sun, 4 Feb 2024 22:04:40 +0900 Subject: [PATCH] feat: Add outer header option (#183) --- .../database/header/OuterHeaderOption.kt | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tinypass/src/commonMain/kotlin/io/spherelabs/crypto/tinypass/database/header/OuterHeaderOption.kt diff --git a/tinypass/src/commonMain/kotlin/io/spherelabs/crypto/tinypass/database/header/OuterHeaderOption.kt b/tinypass/src/commonMain/kotlin/io/spherelabs/crypto/tinypass/database/header/OuterHeaderOption.kt new file mode 100644 index 00000000..e465464c --- /dev/null +++ b/tinypass/src/commonMain/kotlin/io/spherelabs/crypto/tinypass/database/header/OuterHeaderOption.kt @@ -0,0 +1,41 @@ +package io.spherelabs.crypto.tinypass.database.header + +import io.spherelabs.crypto.tinypass.database.signature.Signature +import okio.Buffer +import okio.BufferedSink + +data class OuterHeaderOption( + val signature: Signature, + val version: Version, + val cipherId: CipherId, + val compressionFlags: CompressionFlags +) { + fun serialize(sink: BufferedSink) { + signature.serialize(sink) + version.serialize(sink) + + sink.writeByte(CIPHER_ID) + sink.writeIntLe(16) + val bytes = Buffer().apply { + writeLong(cipherId.uuid.mostSignificantBits) + writeLong(cipherId.uuid.leastSignificantBits) + } + sink.write(bytes.readByteArray()) + + sink.writeByte(OuterHeader.COMPRESSION) + sink.writeIntLe(Int.SIZE_BYTES) + sink.writeIntLe(compressionFlags.ordinal) + } + + companion object { + val Default = OuterHeaderOption( + signature = Signature.Default, + version = Version(4, 1), + compressionFlags = CompressionFlags.GZip, + cipherId = CipherId.Aes, + ) + + const val CIPHER_ID = 1 + const val COMPRESSION = 2 + } +}