@@ -73,126 +73,225 @@ class KeystoresTests: LocalTestCase {
73
73
func testHMAC( ) throws {
74
74
let seed = Data . fromHex ( " 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b " ) !
75
75
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
+ }
77
80
XCTAssert ( Data ( hmac) . toHexString ( ) == " 87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854 " )
78
81
}
79
82
80
83
func testV3keystoreExportPrivateKey( ) throws {
81
- let keystore = try ! EthereumKeystoreV3 ( password: " " )
84
+ guard let keystore = try ? EthereumKeystoreV3 ( password: " " ) else {
85
+ XCTFail ( )
86
+ return
87
+ }
82
88
XCTAssertNotNil ( keystore)
83
- let account = keystore! . addresses![ 0 ]
89
+ let account = keystore. addresses![ 0 ]
84
90
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
+ }
88
100
XCTAssertNotNil ( key)
89
101
}
90
102
91
103
func testV3keystoreSerialization( ) throws {
92
- let keystore = try ! EthereumKeystoreV3 ( password: " " )
104
+ guard let keystore = try ? EthereumKeystoreV3 ( password: " " ) else {
105
+ XCTFail ( )
106
+ return
107
+ }
93
108
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
+ }
97
118
XCTAssertNotNil ( key)
98
119
99
- let restored = EthereumKeystoreV3 ( data! )
120
+ let restored = EthereumKeystoreV3 ( data)
100
121
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
+ }
103
127
XCTAssertNotNil ( restoredKey)
104
128
XCTAssertEqual ( key, restoredKey)
105
129
}
106
130
107
131
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: " " )
110
137
XCTAssert ( keystore != nil )
111
138
}
112
139
113
140
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)
118
154
}
119
155
120
156
func testBIP32keystoreExportPrivateKey( ) throws {
121
157
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
+ }
123
162
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
+ }
126
168
XCTAssertNotNil ( key)
127
169
}
128
170
129
171
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
+ }
131
176
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
+ }
134
182
let pubKey = Utilities . privateToPublic ( key, compressed: true )
135
183
XCTAssert ( pubKey? . toHexString ( ) == " 027160bd3a4d938cac609ff3a11fe9233de7b76c22a80d2b575e202cbf26631659 " )
136
184
}
137
185
138
186
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
+ }
140
191
XCTAssertNotNil ( keystore)
141
- let rootNode = try ! keystore!. serializeRootNodeToString ( password: " " )
192
+ guard let rootNode = try ? keystore. serializeRootNodeToString ( password: " " ) else {
193
+ XCTFail ( )
194
+ return
195
+ }
142
196
XCTAssert ( rootNode == " xprvA2KM71v838kPwE8Lfr12m9DL939TZmPStMnhoFcZkr1nBwDXSG7c3pjYbMM9SaqcofK154zNSCp7W7b4boEVstZu1J3pniLQJJq7uvodfCV " )
143
197
}
144
198
145
199
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
+ }
147
204
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
+ }
150
210
let pubKey = Utilities . privateToPublic ( key, compressed: true )
151
211
XCTAssert ( pubKey? . toHexString ( ) == " 027160bd3a4d938cac609ff3a11fe9233de7b76c22a80d2b575e202cbf26631659 " )
152
212
}
153
213
154
214
func testByBIP32keystoreCreateChildAccount( ) throws {
155
215
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
+ }
157
220
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
+ }
163
229
XCTAssertNotNil ( key)
164
230
}
165
231
166
232
func testByBIP32keystoreCreateCustomChildAccount( ) throws {
167
233
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
+ }
169
238
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
+ }
175
254
XCTAssertNotNil ( key)
176
- print ( keystore! . addressStorage. paths)
255
+ print ( keystore. addressStorage. paths)
177
256
}
178
257
179
258
func testByBIP32keystoreSaveAndDeriva( ) throws {
180
259
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
+ }
182
264
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)
193
293
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 ] )
196
295
}
197
296
198
297
// FIXME: Failed on async with 10_000 iterations
@@ -207,7 +306,10 @@ class KeystoresTests: LocalTestCase {
207
306
208
307
func testRIPEMD( ) throws {
209
308
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
+ }
211
313
XCTAssert ( hash. toHexString ( ) == " 5d0689ef49d2fae572b881b123a85ffa21595f36 " )
212
314
}
213
315
@@ -269,15 +371,21 @@ class KeystoresTests: LocalTestCase {
269
371
func testKeystoreDerivationTime( ) throws {
270
372
let privateKey = Data . randomBytes ( length: 32 ) !
271
373
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
+ }
273
378
let account = ks. addresses!. first!
274
- _ = try ! ks. UNSAFE_getPrivateKeyData ( password: " TEST " , account: account)
379
+ _ = try ? ks. UNSAFE_getPrivateKeyData ( password: " TEST " , account: account)
275
380
}
276
381
}
277
382
278
383
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 " )
281
389
}
282
390
283
391
}
0 commit comments