Skip to content
This repository has been archived by the owner on Sep 13, 2024. It is now read-only.

Commit

Permalink
Fixed EthereumKeystoreV3 private key
Browse files Browse the repository at this point in the history
  • Loading branch information
v57 committed Nov 29, 2018
1 parent 664aac2 commit 8eb4e77
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
6 changes: 3 additions & 3 deletions Sources/KeystoreManager/EthereumKeystoreV3.swift
Original file line number Diff line number Diff line change
Expand Up @@ -173,15 +173,15 @@ public class EthereumKeystoreV3: AbstractKeystore {
}
guard let derivedKey = passwordDerivedKey else { return nil }
var dataForMAC = Data()

dataForMAC.append(derivedKey.suffix(16))
let derivedKeyLast16bytes = Data(derivedKey[(derivedKey.count - 16) ... (derivedKey.count - 1)])
dataForMAC.append(derivedKeyLast16bytes)
guard let cipherText = Data.fromHex(keystoreParams.crypto.ciphertext) else { return nil }
if cipherText.count != 32 { return nil }
dataForMAC.append(cipherText)
let mac = dataForMAC.sha3(.keccak256)
guard let calculatedMac = Data.fromHex(keystoreParams.crypto.mac), mac.constantTimeComparisonTo(calculatedMac) else { return nil }
let cipher = keystoreParams.crypto.cipher
let decryptionKey = derivedKey.suffix(16)
let decryptionKey = derivedKey[0 ... 15]
guard let IV = Data.fromHex(keystoreParams.crypto.cipherparams.iv) else { return nil }
var decryptedPK: Array<UInt8>?
switch cipher {
Expand Down
9 changes: 6 additions & 3 deletions Tests/SECP256K1Tests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -102,14 +102,17 @@ class SECP256K1Tests: XCTestCase {
func testSomeSignatures() throws {

let password = "Your password"
let keystore = try! BIP32Keystore(mnemonics: Mnemonics(), password: password)
let keystore = try! EthereumKeystoreV3(password: password)!
let signer = keystore.addresses[0]

for i in 1...3 {
print("Signing \(i)/10")
let message = "\(i) Hello World \(i)".data
let signature = try! Web3Signer.signPersonalMessage(message, keystore: keystore, account: keystore.addresses[0], password: password)
let signature = try! Web3Signer.signPersonalMessage(message, keystore: keystore, account: signer, password: password)
let address = try! Web3.default.personal.ecrecover(personalMessage: message, signature: signature)
XCTAssertEqual(address,keystore.addresses[0])
print(address)
print(signer)
XCTAssertEqual(address,signer)
}
}
}

0 comments on commit 8eb4e77

Please sign in to comment.