Skip to content

Commit d99c0f6

Browse files
fix: CI failure + new tests for BIP39
1 parent c90def5 commit d99c0f6

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

Sources/Web3Core/KeystoreManager/BIP39.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,12 @@ public enum BIP39Language: CaseIterable {
3636
return spanishWords
3737
}
3838
}
39+
3940
public var separator: String {
41+
return String(separatorCharacter)
42+
}
43+
44+
public var separatorCharacter: Character {
4045
switch self {
4146
case .japanese:
4247
return "\u{3000}"

Tests/web3swiftTests/localTests/BIP39Tests.swift

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,6 @@ import XCTest
1111

1212
final class BIP39Tests: XCTestCase {
1313

14-
func testAllLanguageMnemonics() throws {
15-
for language in BIP39Language.allCases {
16-
guard let newMnemonics = try BIP39.generateMnemonics(bitsOfEntropy: 128, language: language) else {
17-
XCTFail("Failed to generate BIP39 mnemonics phrase")
18-
return
19-
}
20-
let wordsOfNewMnemonic = newMnemonics.split(separator: language.separator).map { String($0) }
21-
for word in wordsOfNewMnemonic {
22-
guard language.words.contains(word) else {
23-
XCTFail("Given word is not contained in the list of words of selected language available for mnemonics generation: \(word); \(language)")
24-
return
25-
}
26-
}
27-
}
28-
}
29-
3014
func testBIP39() throws {
3115
var entropy = Data.fromHex("00000000000000000000000000000000")!
3216
var phrase = BIP39.generateMnemonicsFromEntropy(entropy: entropy)
@@ -167,6 +151,7 @@ final class BIP39Tests: XCTestCase {
167151
XCTAssert(keystore1?.addresses?.first == keystore2?.addresses?.first)
168152
}
169153

154+
/// It's expected for the entropy bits count to be [128, 256] and (bits mod 32) must return 0.
170155
func testWrongBitsOfEntropyMustThrow() throws {
171156
XCTAssertThrowsError(try BIP39.generateMnemonics(entropy: 127))
172157
XCTAssertThrowsError(try BIP39.generateMnemonics(entropy: 255))
@@ -182,4 +167,33 @@ final class BIP39Tests: XCTestCase {
182167
XCTAssertFalse(try BIP39.generateMnemonics(entropy: 256).isEmpty)
183168
}
184169

170+
func testBip39CorrectWordsCount() throws {
171+
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 128).count, 12)
172+
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 160).count, 15)
173+
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 192).count, 18)
174+
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 224).count, 21)
175+
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 256).count, 24)
176+
}
177+
178+
func testAllLanguageMnemonics() throws {
179+
for language in BIP39Language.allCases {
180+
let mnemonicPhrase = try BIP39.generateMnemonics(entropy: 128, language: language)
181+
for word in mnemonicPhrase {
182+
guard language.words.contains(word) else {
183+
XCTFail("Given word is not contained in the list of words of selected language available for mnemonics generation: \(word); \(language)")
184+
return
185+
}
186+
}
187+
}
188+
}
189+
190+
func testBip39MnemonicSeparatorUse() throws {
191+
for language in BIP39Language.allCases {
192+
guard let mnemonicPhrase = try BIP39.generateMnemonics(bitsOfEntropy: 128, language: language) else {
193+
XCTFail("Failed to generate BIP39 mnemonics phrase with 128 bits of entropy using language: \(language)")
194+
return
195+
}
196+
XCTAssertEqual(mnemonicPhrase.split(whereSeparator: { $0 == language.separatorCharacter }).count, 12)
197+
}
198+
}
185199
}

0 commit comments

Comments
 (0)