Skip to content

Commit

Permalink
完善单元测试;添加中文支持;改进部分命名
Browse files Browse the repository at this point in the history
Cocody committed Jul 26, 2017

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent f8ef591 commit e6f18d4
Showing 6 changed files with 48 additions and 21 deletions.
4 changes: 4 additions & 0 deletions CKMnemonic/CKMnemonic.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
@@ -21,6 +21,7 @@
CC2F87FA1F2710C700117966 /* String+MnemonicData.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2F87F91F2710C700117966 /* String+MnemonicData.swift */; };
CC2F87FC1F27111A00117966 /* vectors.json in Resources */ = {isa = PBXBuildFile; fileRef = CC2F87FB1F27111A00117966 /* vectors.json */; };
CC2F87FD1F2712EF00117966 /* vectors.json in Resources */ = {isa = PBXBuildFile; fileRef = CC2F87FB1F27111A00117966 /* vectors.json */; };
CC2F87FF1F28333D00117966 /* Chinese.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2F87FE1F28333D00117966 /* Chinese.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
@@ -54,6 +55,7 @@
CC2F87F71F26ECDA00117966 /* Data+CKBitArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Data+CKBitArray.swift"; sourceTree = "<group>"; };
CC2F87F91F2710C700117966 /* String+MnemonicData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+MnemonicData.swift"; sourceTree = "<group>"; };
CC2F87FB1F27111A00117966 /* vectors.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = vectors.json; sourceTree = "<group>"; };
CC2F87FE1F28333D00117966 /* Chinese.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Chinese.swift; sourceTree = "<group>"; };
D4B98688A08AA24F605695C6 /* Pods-CKMnemonic.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CKMnemonic.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CKMnemonic/Pods-CKMnemonic.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */

@@ -147,6 +149,7 @@
isa = PBXGroup;
children = (
CC2F87F41F26DCE600117966 /* English.swift */,
CC2F87FE1F28333D00117966 /* Chinese.swift */,
);
path = Language;
sourceTree = "<group>";
@@ -376,6 +379,7 @@
buildActionMask = 2147483647;
files = (
CC2F87F81F26ECDA00117966 /* Data+CKBitArray.swift in Sources */,
CC2F87FF1F28333D00117966 /* Chinese.swift in Sources */,
CC2F87F51F26DCE600117966 /* CKMnemonic.swift in Sources */,
CC2F87FA1F2710C700117966 /* String+MnemonicData.swift in Sources */,
CC2F87D41F26DCB300117966 /* ViewController.swift in Sources */,
24 changes: 14 additions & 10 deletions CKMnemonic/CKMnemonic/CKMnemonic/CKMnemonic.swift
Original file line number Diff line number Diff line change
@@ -13,10 +13,14 @@ import Security
public enum CKMnemonicLanguageType {
case english

case chinese

func words() -> [String] {
switch self {
case .english:
return String.englishs
return String.englishMnemonics
case .chinese:
return String.chineseMnemonics
}
}
}
@@ -31,11 +35,11 @@ enum CKMnemonicError: Error
public class CKMnemonic: NSObject {
public static func mnemonicString(from hexString: String, language: CKMnemonicLanguageType) throws -> String {
let seedData = hexString.ck_mnemonicData()
print("\(hexString.characters.count)\t\(seedData.count)")
// print("\(hexString.characters.count)\t\(seedData.count)")
let hashData = seedData.sha256()
print(hashData.toHexString())
// print(hashData.toHexString())
let checkSum = hashData.ck_toBitArray()
print(checkSum)
// print(checkSum)
var seedBits = seedData.ck_toBitArray()

for i in 0..<seedBits.count / 32 {
@@ -51,15 +55,15 @@ public class CKMnemonic: NSObject {
let startIndex = i * length
let subArray = seedBits[startIndex..<startIndex + length]
let subString = subArray.joined(separator: "")
print(subString)
// print(subString)

let index = Int(strtoul(subString, nil, 2))
mnemonic.append(words[index])
}
return mnemonic.joined(separator: " ")
}

public static func deterministicSeedString(from mnemonic: String, passphrase: String = "", language: CKMnemonicLanguageType) -> String {
public static func deterministicSeedString(from mnemonic: String, passphrase: String = "", language: CKMnemonicLanguageType) throws -> String {

func normalized(string: String) -> Data? {
guard let data = string.data(using: .utf8, allowLossyConversion: true) else {
@@ -92,8 +96,8 @@ public class CKMnemonic: NSObject {

return bytes.toHexString()
} catch {
print(error)
return ""
// print(error)
throw error
}
}

@@ -105,11 +109,11 @@ public class CKMnemonic: NSObject {
let count = strength / 8
let bytes = Array<UInt8>(repeating: 0, count: count)
let status = SecRandomCopyBytes(kSecRandomDefault, count, UnsafeMutablePointer<UInt8>(mutating: bytes))
print(status)
// print(status)
if status != -1 {
let data = Data(bytes: bytes)
let hexString = data.toHexString()
print(hexString)
// print(hexString)

return try mnemonicString(from: hexString, language: language)
}
12 changes: 12 additions & 0 deletions CKMnemonic/CKMnemonic/CKMnemonic/Language/Chinese.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// Chinese.swift
// CKMnemonic
//
// Created by 仇弘扬 on 2017/7/26.
// Copyright © 2017年 askcoin. All rights reserved.
//

import Foundation
extension String {
static let chineseMnemonics = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "使", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "线", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "西", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "广", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "便", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "穿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "绿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "沿", "", "", "", "", "", "", "", "", "怀", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "湿", "", "", "", "", "", "", "", "", "访", "", "", "", "", "", "", "", "", "", "", "", "", "", "退", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "齿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "亿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "仿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "寿", "", "", "", "", "", "", "", "", "", "稿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "鸿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "姿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "耀", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "宿", "", "", "", "", "", "", "", "", "", "", "", "", "殿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "饿", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
}
2 changes: 1 addition & 1 deletion CKMnemonic/CKMnemonic/CKMnemonic/Language/English.swift

Large diffs are not rendered by default.

19 changes: 12 additions & 7 deletions CKMnemonic/CKMnemonic/ViewController.swift
Original file line number Diff line number Diff line change
@@ -14,13 +14,18 @@ class ViewController: UIViewController {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
do {
// let mnemonic = try CKMnemonic.generateMnemonic(strength: 128, language: .english)
let mnemonic = try CKMnemonic.mnemonicString(from: "994fe657cc35757e7256812ff2791249", language: .english)
let seed = CKMnemonic.deterministicSeedString(from: mnemonic, passphrase: "Test", language: .english)
let seedNoSec = CKMnemonic.deterministicSeedString(from: mnemonic, language: .english)
print(seed)
print(seedNoSec)
print(mnemonic)
let language: CKMnemonicLanguageType = .chinese
// let mnemonic = try CKMnemonic.generateMnemonic(strength: 128, language: language)
let mnemonicC = try CKMnemonic.mnemonicString(from: "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", language: language)
let mnemonicE = try CKMnemonic.mnemonicString(from: "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", language: .english)
let seedC = try CKMnemonic.deterministicSeedString(from: mnemonicC, passphrase: "Test", language: language)
let seedE = try CKMnemonic.deterministicSeedString(from: mnemonicE, passphrase: "Test", language: .english)
// let seedNoSec = try CKMnemonic.deterministicSeedString(from: mnemonic, language: language)
// print(seedNoSec)
print(mnemonicC)
print(mnemonicE)
print(seedC)
print(seedE)
} catch {
print(error)
}
8 changes: 5 additions & 3 deletions CKMnemonic/CKMnemonicTests/CKMnemonicTests.swift
Original file line number Diff line number Diff line change
@@ -33,18 +33,20 @@ class CKMnemonicTests: XCTestCase {
do {
let data = try Data(contentsOf: url)
let vectors: [String: Any] = try JSONSerialization.jsonObject(with: data, options: [.allowFragments, .mutableContainers, .mutableLeaves]) as! [String: Any]
print(vectors)

if let cases: Array<Array<String>> = vectors["english"] as? Array<Array<String>> {
for test in cases {
let selfM = try CKMnemonic.mnemonicString(from: test[0], language: .english)
let m = test[1]
XCTAssertTrue(selfM == m, "计算出的助记词没有通过测试")

// let seed = CKMnemonic.deterministicSeedString(from: selfM, language: .english)
let selfSeed = try CKMnemonic.deterministicSeedString(from: selfM, passphrase: "TREZOR", language: .english)
let seed = test[2]
XCTAssertTrue(selfSeed == seed, "计算出的 seed 没有通过测试")
}
}
} catch {
XCTFail("解析Json失败")
XCTFail("测试未通过,原因:\(error)")
}

}

0 comments on commit e6f18d4

Please sign in to comment.