Skip to content

Commit c90def5

Browse files
fix: BIP39 use given language to generate mnemonics;
1 parent 34cf1e8 commit c90def5

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

Sources/Web3Core/KeystoreManager/BIP39.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import Foundation
77
import CryptoSwift
88

9-
public enum BIP39Language {
9+
public enum BIP39Language: CaseIterable {
1010
case english
1111
case chinese_simplified
1212
case chinese_traditional
@@ -124,7 +124,7 @@ public class BIP39 {
124124
public static func generateMnemonicsFromEntropy(entropy: Data, language: BIP39Language = .english) -> String? {
125125
guard entropy.count >= 16, entropy.count & 4 == 0 else { return nil }
126126
let separator = language.separator
127-
let wordList = generateMnemonicsFrom(entropy: entropy)
127+
let wordList = generateMnemonicsFrom(entropy: entropy, language: language)
128128
return wordList.joined(separator: separator)
129129
}
130130

Tests/web3swiftTests/localTests/BIP39Tests.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,22 @@ 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+
1430
func testBIP39() throws {
1531
var entropy = Data.fromHex("00000000000000000000000000000000")!
1632
var phrase = BIP39.generateMnemonicsFromEntropy(entropy: entropy)

0 commit comments

Comments
 (0)