From bd70058f78a99ed7d9dfebaa3a5760a9d69a2b86 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 15 Sep 2025 12:30:56 -0400 Subject: [PATCH] Avoids creating a byte array and recreating it again inside of the Mac instance. --- .../vitorpamplona/quartz/nip44Encryption/Nip44v2.kt | 2 +- .../quartz/nip44Encryption/crypto/Hkdf.kt | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip44Encryption/Nip44v2.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip44Encryption/Nip44v2.kt index ef9d0bb55..d3ca381fe 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip44Encryption/Nip44v2.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip44Encryption/Nip44v2.kt @@ -210,7 +210,7 @@ class Nip44v2 { "AAD associated data must be 32 bytes, but it was ${aad.size} bytes" } - return hkdf.extract(aad + message, key) + return hkdf.extract(aad, message, key) } fun getMessageKeys( diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip44Encryption/crypto/Hkdf.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip44Encryption/crypto/Hkdf.kt index 263ef2efe..94fa551f0 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip44Encryption/crypto/Hkdf.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip44Encryption/crypto/Hkdf.kt @@ -37,6 +37,18 @@ class Hkdf( return mac.doFinal(key) } + fun extract( + key1: ByteArray, + key2: ByteArray, + salt: ByteArray, + ): ByteArray { + val mac = Mac.getInstance(algorithm) + mac.init(SecretKeySpec(salt, algorithm)) + mac.update(key1) + mac.update(key2) + return mac.doFinal() + } + fun expand( key: ByteArray, nonce: ByteArray,