diff --git a/Sources/KeystoreManager/EthereumKeystoreV3.swift b/Sources/KeystoreManager/EthereumKeystoreV3.swift index 089b430..b099a85 100644 --- a/Sources/KeystoreManager/EthereumKeystoreV3.swift +++ b/Sources/KeystoreManager/EthereumKeystoreV3.swift @@ -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? switch cipher { diff --git a/Tests/SECP256K1Tests.swift b/Tests/SECP256K1Tests.swift index 12c546a..7f7e017 100644 --- a/Tests/SECP256K1Tests.swift +++ b/Tests/SECP256K1Tests.swift @@ -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) } } }