Skip to content

Commit

Permalink
fix: CI failure + new tests for BIP39
Browse files Browse the repository at this point in the history
  • Loading branch information
JeneaVranceanu committed Apr 1, 2024
1 parent c90def5 commit d99c0f6
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 16 deletions.
5 changes: 5 additions & 0 deletions Sources/Web3Core/KeystoreManager/BIP39.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,12 @@ public enum BIP39Language: CaseIterable {
return spanishWords
}
}

public var separator: String {
return String(separatorCharacter)
}

public var separatorCharacter: Character {
switch self {
case .japanese:
return "\u{3000}"
Expand Down
46 changes: 30 additions & 16 deletions Tests/web3swiftTests/localTests/BIP39Tests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,6 @@ import XCTest

final class BIP39Tests: XCTestCase {

func testAllLanguageMnemonics() throws {
for language in BIP39Language.allCases {
guard let newMnemonics = try BIP39.generateMnemonics(bitsOfEntropy: 128, language: language) else {
XCTFail("Failed to generate BIP39 mnemonics phrase")
return
}
let wordsOfNewMnemonic = newMnemonics.split(separator: language.separator).map { String($0) }
for word in wordsOfNewMnemonic {
guard language.words.contains(word) else {
XCTFail("Given word is not contained in the list of words of selected language available for mnemonics generation: \(word); \(language)")
return
}
}
}
}

func testBIP39() throws {
var entropy = Data.fromHex("00000000000000000000000000000000")!
var phrase = BIP39.generateMnemonicsFromEntropy(entropy: entropy)
Expand Down Expand Up @@ -167,6 +151,7 @@ final class BIP39Tests: XCTestCase {
XCTAssert(keystore1?.addresses?.first == keystore2?.addresses?.first)
}

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

func testBip39CorrectWordsCount() throws {
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 128).count, 12)
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 160).count, 15)
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 192).count, 18)
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 224).count, 21)
XCTAssertEqual(try BIP39.generateMnemonics(entropy: 256).count, 24)
}

func testAllLanguageMnemonics() throws {
for language in BIP39Language.allCases {
let mnemonicPhrase = try BIP39.generateMnemonics(entropy: 128, language: language)
for word in mnemonicPhrase {
guard language.words.contains(word) else {
XCTFail("Given word is not contained in the list of words of selected language available for mnemonics generation: \(word); \(language)")
return
}
}
}
}

func testBip39MnemonicSeparatorUse() throws {
for language in BIP39Language.allCases {
guard let mnemonicPhrase = try BIP39.generateMnemonics(bitsOfEntropy: 128, language: language) else {
XCTFail("Failed to generate BIP39 mnemonics phrase with 128 bits of entropy using language: \(language)")
return
}
XCTAssertEqual(mnemonicPhrase.split(whereSeparator: { $0 == language.separatorCharacter }).count, 12)
}
}
}

0 comments on commit d99c0f6

Please sign in to comment.