@@ -73,126 +73,225 @@ class KeystoresTests: LocalTestCase {
7373 func testHMAC( ) throws {
7474 let seed = Data . fromHex ( " 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b " ) !
7575 let data = Data . fromHex ( " 4869205468657265 " ) !
76- let hmac = try ! HMAC . init ( key: seed. bytes, variant: HMAC . Variant. sha2 ( . sha512) ) . authenticate ( data. bytes)
76+ guard let hmac = try ? HMAC . init ( key: seed. bytes, variant: HMAC . Variant. sha2 ( . sha512) ) . authenticate ( data. bytes) else {
77+ XCTFail ( )
78+ return
79+ }
7780 XCTAssert ( Data ( hmac) . toHexString ( ) == " 87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854 " )
7881 }
7982
8083 func testV3keystoreExportPrivateKey( ) throws {
81- let keystore = try ! EthereumKeystoreV3 ( password: " " )
84+ guard let keystore = try ? EthereumKeystoreV3 ( password: " " ) else {
85+ XCTFail ( )
86+ return
87+ }
8288 XCTAssertNotNil ( keystore)
83- let account = keystore! . addresses![ 0 ]
89+ let account = keystore. addresses![ 0 ]
8490 print ( account)
85- let data = try ! keystore!. serialize ( )
86- print ( try ! JSONSerialization . jsonObject ( with: data!, options: JSONSerialization . ReadingOptions ( rawValue: 0 ) ) )
87- let key = try ! keystore!. UNSAFE_getPrivateKeyData ( password: " " , account: account)
91+ guard let data = try ? keystore. serialize ( ) else {
92+ XCTFail ( )
93+ return
94+ }
95+ print ( try ? JSONSerialization . jsonObject ( with: data, options: JSONSerialization . ReadingOptions ( rawValue: 0 ) ) )
96+ guard let key = try ? keystore. UNSAFE_getPrivateKeyData ( password: " " , account: account) else {
97+ XCTFail ( )
98+ return
99+ }
88100 XCTAssertNotNil ( key)
89101 }
90102
91103 func testV3keystoreSerialization( ) throws {
92- let keystore = try ! EthereumKeystoreV3 ( password: " " )
104+ guard let keystore = try ? EthereumKeystoreV3 ( password: " " ) else {
105+ XCTFail ( )
106+ return
107+ }
93108 XCTAssertNotNil ( keystore)
94- let account = keystore!. addresses![ 0 ]
95- let data = try ! keystore!. serialize ( )
96- let key = try ! keystore!. UNSAFE_getPrivateKeyData ( password: " " , account: account)
109+ let account = keystore. addresses![ 0 ]
110+ guard let data = try ? keystore. serialize ( ) else {
111+ XCTFail ( )
112+ return
113+ }
114+ guard let key = try ? keystore. UNSAFE_getPrivateKeyData ( password: " " , account: account) else {
115+ XCTFail ( )
116+ return
117+ }
97118 XCTAssertNotNil ( key)
98119
99- let restored = EthereumKeystoreV3 ( data! )
120+ let restored = EthereumKeystoreV3 ( data)
100121 XCTAssertNotNil ( restored)
101- XCTAssertEqual ( keystore!. addresses!. first!, restored!. addresses!. first!)
102- let restoredKey = try ! restored!. UNSAFE_getPrivateKeyData ( password: " " , account: account)
122+ XCTAssertEqual ( keystore. addresses!. first!, restored!. addresses!. first!)
123+ guard let restoredKey = try ? restored!. UNSAFE_getPrivateKeyData ( password: " " , account: account) else {
124+ XCTFail ( )
125+ return
126+ }
103127 XCTAssertNotNil ( restoredKey)
104128 XCTAssertEqual ( key, restoredKey)
105129 }
106130
107131 func testNewBIP32keystore( ) throws {
108- let mnemonic = try ! BIP39 . generateMnemonics ( bitsOfEntropy: 256 ) !
109- let keystore = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " )
132+ guard let mnemonic = BIP39 . generateMnemonics ( bitsOfEntropy: 256 ) else {
133+ XCTFail ( )
134+ return
135+ }
136+ let keystore = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " )
110137 XCTAssert ( keystore != nil )
111138 }
112139
113140 func testSameAddressesFromTheSameMnemonics( ) throws {
114- let mnemonic = try ! BIP39 . generateMnemonics ( bitsOfEntropy: 256 ) !
115- let keystore1 = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " )
116- let keystore2 = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " )
117- XCTAssert ( keystore1? . addresses? . first == keystore2? . addresses? . first)
141+ guard let mnemonic = BIP39 . generateMnemonics ( bitsOfEntropy: 256 ) else {
142+ XCTFail ( )
143+ return
144+ }
145+ guard let keystore1 = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " ) else {
146+ XCTFail ( )
147+ return
148+ }
149+ guard let keystore2 = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " ) else {
150+ XCTFail ( )
151+ return
152+ }
153+ XCTAssert ( keystore1. addresses? . first == keystore2. addresses? . first)
118154 }
119155
120156 func testBIP32keystoreExportPrivateKey( ) throws {
121157 let mnemonic = " normal dune pole key case cradle unfold require tornado mercy hospital buyer "
122- let keystore = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " )
158+ guard let keystore = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " ) else {
159+ XCTFail ( )
160+ return
161+ }
123162 XCTAssertNotNil ( keystore)
124- let account = keystore!. addresses![ 0 ]
125- let key = try ! keystore!. UNSAFE_getPrivateKeyData ( password: " " , account: account)
163+ let account = keystore. addresses![ 0 ]
164+ guard let key = try ? keystore. UNSAFE_getPrivateKeyData ( password: " " , account: account) else {
165+ XCTFail ( )
166+ return
167+ }
126168 XCTAssertNotNil ( key)
127169 }
128170
129171 func testBIP32keystoreMatching( ) throws {
130- let keystore = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " banana " )
172+ guard let keystore = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " banana " ) else {
173+ XCTFail ( )
174+ return
175+ }
131176 XCTAssertNotNil ( keystore)
132- let account = keystore!. addresses![ 0 ]
133- let key = try ! keystore!. UNSAFE_getPrivateKeyData ( password: " " , account: account)
177+ let account = keystore. addresses![ 0 ]
178+ guard let key = try ? keystore. UNSAFE_getPrivateKeyData ( password: " " , account: account) else {
179+ XCTFail ( )
180+ return
181+ }
134182 let pubKey = Utilities . privateToPublic ( key, compressed: true )
135183 XCTAssert ( pubKey? . toHexString ( ) == " 027160bd3a4d938cac609ff3a11fe9233de7b76c22a80d2b575e202cbf26631659 " )
136184 }
137185
138186 func testBIP32keystoreMatchingRootNode( ) throws {
139- let keystore = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " banana " )
187+ guard let keystore = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " banana " ) else {
188+ XCTFail ( )
189+ return
190+ }
140191 XCTAssertNotNil ( keystore)
141- let rootNode = try ! keystore!. serializeRootNodeToString ( password: " " )
192+ guard let rootNode = try ? keystore. serializeRootNodeToString ( password: " " ) else {
193+ XCTFail ( )
194+ return
195+ }
142196 XCTAssert ( rootNode == " xprvA2KM71v838kPwE8Lfr12m9DL939TZmPStMnhoFcZkr1nBwDXSG7c3pjYbMM9SaqcofK154zNSCp7W7b4boEVstZu1J3pniLQJJq7uvodfCV " )
143197 }
144198
145199 func testBIP32keystoreCustomPathMatching( ) throws {
146- let keystore = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " banana " , prefixPath: " m/44'/60'/0'/0 " )
200+ guard let keystore = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " banana " , prefixPath: " m/44'/60'/0'/0 " ) else {
201+ XCTFail ( )
202+ return
203+ }
147204 XCTAssertNotNil ( keystore)
148- let account = keystore!. addresses![ 0 ]
149- let key = try ! keystore!. UNSAFE_getPrivateKeyData ( password: " " , account: account)
205+ let account = keystore. addresses![ 0 ]
206+ guard let key = try ? keystore. UNSAFE_getPrivateKeyData ( password: " " , account: account) else {
207+ XCTFail ( )
208+ return
209+ }
150210 let pubKey = Utilities . privateToPublic ( key, compressed: true )
151211 XCTAssert ( pubKey? . toHexString ( ) == " 027160bd3a4d938cac609ff3a11fe9233de7b76c22a80d2b575e202cbf26631659 " )
152212 }
153213
154214 func testByBIP32keystoreCreateChildAccount( ) throws {
155215 let mnemonic = " normal dune pole key case cradle unfold require tornado mercy hospital buyer "
156- let keystore = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " )
216+ guard let keystore = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " ) else {
217+ XCTFail ( )
218+ return
219+ }
157220 XCTAssertNotNil ( keystore)
158- XCTAssertEqual ( keystore!. addresses? . count, 1 )
159- try ! keystore? . createNewChildAccount ( password: " " )
160- XCTAssertEqual ( keystore? . addresses? . count, 2 )
161- let account = keystore!. addresses![ 0 ]
162- let key = try ! keystore!. UNSAFE_getPrivateKeyData ( password: " " , account: account)
221+ XCTAssertEqual ( keystore. addresses? . count, 1 )
222+ try ? keystore. createNewChildAccount ( password: " " )
223+ XCTAssertEqual ( keystore. addresses? . count, 2 )
224+ let account = keystore. addresses![ 0 ]
225+ guard let key = try ? keystore. UNSAFE_getPrivateKeyData ( password: " " , account: account) else {
226+ XCTFail ( )
227+ return
228+ }
163229 XCTAssertNotNil ( key)
164230 }
165231
166232 func testByBIP32keystoreCreateCustomChildAccount( ) throws {
167233 let mnemonic = " normal dune pole key case cradle unfold require tornado mercy hospital buyer "
168- let keystore = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " )
234+ guard let keystore = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " ) else {
235+ XCTFail ( )
236+ return
237+ }
169238 XCTAssertNotNil ( keystore)
170- XCTAssertEqual ( keystore!. addresses? . count, 1 )
171- try ! keystore? . createNewCustomChildAccount ( password: " " , path: " /42/1 " )
172- XCTAssertEqual ( keystore? . addresses? . count, 2 )
173- let account = keystore!. addresses![ 1 ]
174- let key = try ! keystore!. UNSAFE_getPrivateKeyData ( password: " " , account: account)
239+ XCTAssertEqual ( keystore. addresses? . count, 1 )
240+ try ? keystore. createNewCustomChildAccount ( password: " " , path: " /42/1 " )
241+ XCTAssertEqual ( keystore. addresses? . count, 2 )
242+ guard keystore. addresses? . count ?? 0 > 1 else {
243+ XCTFail ( )
244+ return
245+ }
246+ guard let account = keystore. addresses ? [ 1 ] else {
247+ XCTFail ( )
248+ return
249+ }
250+ guard let key = try ? keystore. UNSAFE_getPrivateKeyData ( password: " " , account: account) else {
251+ XCTFail ( )
252+ return
253+ }
175254 XCTAssertNotNil ( key)
176- print ( keystore! . addressStorage. paths)
255+ print ( keystore. addressStorage. paths)
177256 }
178257
179258 func testByBIP32keystoreSaveAndDeriva( ) throws {
180259 let mnemonic = " normal dune pole key case cradle unfold require tornado mercy hospital buyer "
181- let keystore = try ! BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " , prefixPath: " m/44'/60'/0' " )
260+ guard let keystore = try ? BIP32Keystore ( mnemonics: mnemonic, password: " " , mnemonicsPassword: " " , prefixPath: " m/44'/60'/0' " ) else {
261+ XCTFail ( )
262+ return
263+ }
182264 XCTAssertNotNil ( keystore)
183- XCTAssertEqual ( keystore!. addresses? . count, 1 )
184- try ! keystore? . createNewCustomChildAccount ( password: " " , path: " /0/1 " )
185- XCTAssertEqual ( keystore? . addresses? . count, 2 )
186- let data = try ! keystore? . serialize ( )
187- let recreatedStore = BIP32Keystore . init ( data!)
188- XCTAssert ( keystore? . addresses? . count == recreatedStore? . addresses? . count)
189- XCTAssert ( keystore? . rootPrefix == recreatedStore? . rootPrefix)
190- print ( keystore!. addresses![ 0 ] . address)
191- print ( keystore!. addresses![ 1 ] . address)
192- print ( recreatedStore!. addresses![ 0 ] . address)
265+ XCTAssertEqual ( keystore. addresses? . count, 1 )
266+ try ? keystore. createNewCustomChildAccount ( password: " " , path: " /0/1 " )
267+ XCTAssertEqual ( keystore. addresses? . count, 2 )
268+ guard let data = try ? keystore. serialize ( ) else {
269+ XCTFail ( )
270+ return
271+ }
272+ let recreatedStore = BIP32Keystore . init ( data)
273+ XCTAssert ( keystore. addresses? . count == recreatedStore? . addresses? . count)
274+ XCTAssert ( keystore. rootPrefix == recreatedStore? . rootPrefix)
275+ guard let firstAddress = keystore. addresses? . first else {
276+ XCTFail ( )
277+ return
278+ }
279+ guard let recreatedFirstAddress = recreatedStore? . addresses? . first else {
280+ XCTFail ( )
281+ return
282+ }
283+ print ( firstAddress. address)
284+ print ( recreatedFirstAddress. address)
285+ XCTAssert ( firstAddress == recreatedFirstAddress)
286+
287+ guard keystore. addresses? . count ?? 0 > 1 && recreatedStore? . addresses? . count ?? 0 > 1 else {
288+ XCTFail ( )
289+ return
290+ }
291+
292+ print ( keystore. addresses![ 1 ] . address)
193293 print ( recreatedStore!. addresses![ 1 ] . address)
194- XCTAssert ( keystore? . addresses![ 0 ] == recreatedStore? . addresses![ 0 ] )
195- XCTAssert ( keystore? . addresses![ 1 ] == recreatedStore? . addresses![ 1 ] )
294+ XCTAssert ( keystore. addresses![ 1 ] == recreatedStore? . addresses![ 1 ] )
196295 }
197296
198297 // FIXME: Failed on async with 10_000 iterations
@@ -207,7 +306,10 @@ class KeystoresTests: LocalTestCase {
207306
208307 func testRIPEMD( ) throws {
209308 let data = " message digest " . data ( using: . ascii)
210- let hash = try ! RIPEMD160 . hash ( message: data!)
309+ guard let hash = try ? RIPEMD160 . hash ( message: data!) else {
310+ XCTFail ( )
311+ return
312+ }
211313 XCTAssert ( hash. toHexString ( ) == " 5d0689ef49d2fae572b881b123a85ffa21595f36 " )
212314 }
213315
@@ -269,15 +371,21 @@ class KeystoresTests: LocalTestCase {
269371 func testKeystoreDerivationTime( ) throws {
270372 let privateKey = Data . randomBytes ( length: 32 ) !
271373 measure {
272- let ks = try ! EthereumKeystoreV3 ( privateKey: privateKey, password: " TEST " ) !
374+ guard let ks = try ? EthereumKeystoreV3 ( privateKey: privateKey, password: " TEST " ) else {
375+ XCTFail ( )
376+ return
377+ }
273378 let account = ks. addresses!. first!
274- _ = try ! ks. UNSAFE_getPrivateKeyData ( password: " TEST " , account: account)
379+ _ = try ? ks. UNSAFE_getPrivateKeyData ( password: " TEST " , account: account)
275380 }
276381 }
277382
278383 func testSingleScryptDerivation( ) throws {
279- let privateKey = Data . randomBytes ( length: 32 ) !
280- _ = try ! EthereumKeystoreV3 ( privateKey: privateKey, password: " TEST " ) !
384+ guard let privateKey = Data . randomBytes ( length: 32 ) else {
385+ XCTFail ( )
386+ return
387+ }
388+ _ = try ? EthereumKeystoreV3 ( privateKey: privateKey, password: " TEST " )
281389 }
282390
283391}
0 commit comments