From 7c4832a5410f55764d32bd6c1b32a01ea445c037 Mon Sep 17 00:00:00 2001 From: Yurii Shynbuiev Date: Thu, 5 Mar 2026 10:32:15 +0000 Subject: [PATCH] fix: correct HDKey seed error message to report 64 bytes instead of 32 The error message in HDKey and EdHDKey constructors was referencing ECConfig.PRIVATE_KEY_BYTE_SIZE (32 bytes) for the seed length validation message, but BIP32 HDKey derivation requires a 64-byte seed (512 bits, as produced by BIP39 PBKDF2-HMAC-SHA512). Add a dedicated ECConfig.SEED_BYTE_SIZE = 64 constant and use it in all seed-length error messages across all platform targets. Fixes #151 Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Yurii Shynbuiev --- .../org/hyperledger/identus/apollo/derivation/EdHDKey.kt | 2 +- .../org/hyperledger/identus/apollo/derivation/EdHDKey.kt | 2 +- .../kotlin/org/hyperledger/identus/apollo/derivation/HDKey.kt | 4 ++-- .../kotlin/org/hyperledger/identus/apollo/utils/ECConfig.kt | 1 + .../org/hyperledger/identus/apollo/derivation/EdHDKey.kt | 2 +- .../org/hyperledger/identus/apollo/derivation/EdHDKey.kt | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/apollo/src/androidMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt b/apollo/src/androidMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt index 6a37c7c02..abe1c348a 100644 --- a/apollo/src/androidMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt +++ b/apollo/src/androidMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt @@ -78,7 +78,7 @@ actual class EdHDKey actual constructor( */ actual fun initFromSeed(seed: ByteArray): EdHDKey { require(seed.size == 64) { - "Seed expected byte length to be ${ECConfig.PRIVATE_KEY_BYTE_SIZE}" + "Seed expected byte length to be ${ECConfig.SEED_BYTE_SIZE}" } val keySlice = seed.sliceArray(0 until 32) diff --git a/apollo/src/appleMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt b/apollo/src/appleMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt index 6a37c7c02..abe1c348a 100644 --- a/apollo/src/appleMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt +++ b/apollo/src/appleMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt @@ -78,7 +78,7 @@ actual class EdHDKey actual constructor( */ actual fun initFromSeed(seed: ByteArray): EdHDKey { require(seed.size == 64) { - "Seed expected byte length to be ${ECConfig.PRIVATE_KEY_BYTE_SIZE}" + "Seed expected byte length to be ${ECConfig.SEED_BYTE_SIZE}" } val keySlice = seed.sliceArray(0 until 32) diff --git a/apollo/src/commonMain/kotlin/org/hyperledger/identus/apollo/derivation/HDKey.kt b/apollo/src/commonMain/kotlin/org/hyperledger/identus/apollo/derivation/HDKey.kt index 2e1a2f67a..89f438749 100644 --- a/apollo/src/commonMain/kotlin/org/hyperledger/identus/apollo/derivation/HDKey.kt +++ b/apollo/src/commonMain/kotlin/org/hyperledger/identus/apollo/derivation/HDKey.kt @@ -107,7 +107,7 @@ class HDKey( childIndex = childIndex ) { require(seed.size == 64) { - "Seed expected byte length to be ${ECConfig.PRIVATE_KEY_BYTE_SIZE}" + "Seed expected byte length to be ${ECConfig.SEED_BYTE_SIZE}" } } @@ -127,7 +127,7 @@ class HDKey( childIndex = BigIntegerWrapper(childIndex) ) { require(seed.size == 64) { - "Seed expected byte length to be ${ECConfig.PRIVATE_KEY_BYTE_SIZE}" + "Seed expected byte length to be ${ECConfig.SEED_BYTE_SIZE}" } } diff --git a/apollo/src/commonMain/kotlin/org/hyperledger/identus/apollo/utils/ECConfig.kt b/apollo/src/commonMain/kotlin/org/hyperledger/identus/apollo/utils/ECConfig.kt index 00c280752..b57d6976f 100644 --- a/apollo/src/commonMain/kotlin/org/hyperledger/identus/apollo/utils/ECConfig.kt +++ b/apollo/src/commonMain/kotlin/org/hyperledger/identus/apollo/utils/ECConfig.kt @@ -11,6 +11,7 @@ import kotlin.js.JsExport @JsExport object ECConfig { val PRIVATE_KEY_BYTE_SIZE: Int = 32 + val SEED_BYTE_SIZE: Int = 64 internal val PUBLIC_KEY_COORDINATE_BYTE_SIZE: Int = 32 internal val PUBLIC_KEY_COMPRESSED_BYTE_SIZE: Int = PUBLIC_KEY_COORDINATE_BYTE_SIZE + 1 val SIGNATURE_MAX_BYTE_SIZE: Int = 72 diff --git a/apollo/src/jsMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt b/apollo/src/jsMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt index 0b3350699..c9aaae5fb 100644 --- a/apollo/src/jsMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt +++ b/apollo/src/jsMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt @@ -72,7 +72,7 @@ actual class EdHDKey actual constructor( */ actual fun initFromSeed(seed: ByteArray): EdHDKey { require(seed.size == 64) { - "Seed expected byte length to be ${ECConfig.PRIVATE_KEY_BYTE_SIZE}" + "Seed expected byte length to be ${ECConfig.SEED_BYTE_SIZE}" } val key = seed.sliceArray(0 until 32) diff --git a/apollo/src/jvmMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt b/apollo/src/jvmMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt index 6a37c7c02..abe1c348a 100644 --- a/apollo/src/jvmMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt +++ b/apollo/src/jvmMain/kotlin/org/hyperledger/identus/apollo/derivation/EdHDKey.kt @@ -78,7 +78,7 @@ actual class EdHDKey actual constructor( */ actual fun initFromSeed(seed: ByteArray): EdHDKey { require(seed.size == 64) { - "Seed expected byte length to be ${ECConfig.PRIVATE_KEY_BYTE_SIZE}" + "Seed expected byte length to be ${ECConfig.SEED_BYTE_SIZE}" } val keySlice = seed.sliceArray(0 until 32)