Skip to content

Commit 4b7437a

Browse files
author
Alex Vlasov
committed
fix initializing KeystoreV3 with JSON that misses 0x prefix for address field
EthereumAddress now requires 0x prefix explicitly and properly inits from both uppercased and lowercased addresses
1 parent d3299ba commit 4b7437a

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

web3swift/KeystoreManager/Classes/EthereumAddress.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,14 @@ public struct EthereumAddress: Equatable {
7979
case .normal:
8080
guard let data = Data.fromHex(addressString) else {return nil}
8181
guard data.count == 20 else {return nil}
82-
if (!ignoreChecksum && data.toHexString().addHexPrefix() != addressString) {
82+
if !addressString.hasHexPrefix() {
83+
return nil
84+
}
85+
if (!ignoreChecksum && data.toHexString().uppercased() != addressString.stripHexPrefix()) { // cover edge case if address is not completely UPPERCASED and potentially missing 0x prefix
86+
let checksummedAddress = EthereumAddress.toChecksumAddress(data.toHexString().addHexPrefix())
87+
guard checksummedAddress == addressString else {return nil}
88+
}
89+
if (!ignoreChecksum && data.toHexString().addHexPrefix() != addressString.stripHexPrefix()) { // cover edge case if address not completely lowercased and potentially missing 0x prefix
8390
let checksummedAddress = EthereumAddress.toChecksumAddress(data.toHexString().addHexPrefix())
8491
guard checksummedAddress == addressString else {return nil}
8592
}

web3swift/KeystoreManager/Classes/EthereumKeystoreV3.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class EthereumKeystoreV3: AbstractKeystore {
5959
if (keystoreParams.crypto.version != nil && keystoreParams.crypto.version != "1") {return nil}
6060
self.keystoreParams = keystoreParams
6161
if keystoreParams.address != nil {
62-
self.address = EthereumAddress(keystoreParams.address!)
62+
self.address = EthereumAddress(keystoreParams.address!.addHexPrefix())
6363
} else {
6464
return nil
6565
}

web3swiftTests/web3swiftTests.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ class web3swiftTests: XCTestCase {
124124
let keystore = try! EthereumKeystoreV3(password: "");
125125
XCTAssertNotNil(keystore)
126126
let account = keystore!.addresses![0]
127+
print(account)
128+
let data = try! keystore!.serialize()
129+
print(try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions(rawValue:0)))
127130
let key = try! keystore!.UNSAFE_getPrivateKeyData(password: "", account: account)
128131
XCTAssertNotNil(key)
129132
}

0 commit comments

Comments
 (0)