diff --git a/Multisig/UI/Settings/OwnerKeyManagement/KeystoneOwnerKey/KeystoneSignFlow.swift b/Multisig/UI/Settings/OwnerKeyManagement/KeystoneOwnerKey/KeystoneSignFlow.swift index acc9097b2..62d20853d 100644 --- a/Multisig/UI/Settings/OwnerKeyManagement/KeystoneOwnerKey/KeystoneSignFlow.swift +++ b/Multisig/UI/Settings/OwnerKeyManagement/KeystoneOwnerKey/KeystoneSignFlow.swift @@ -113,8 +113,8 @@ extension SECP256K1.UnmarshaledSignature { let vBytes = [UInt8](data.suffix(from: 64).prefix(8)) let vInt = UInt64(vBytes) // recover V by deducting (chainId * 2 + 35) according to EIP-155 - let vRecovered = vInt - (chainIdInt * 2 + 35) - v = try! UInt8(vRecovered % 256) + let vRecovered = vInt % 256 - (chainIdInt * 2 + 35) % 256 + v = try! UInt8(vRecovered) } else { vBytes = [UInt8]([data[64]]) let vInt = UInt8(vBytes) @@ -122,10 +122,10 @@ extension SECP256K1.UnmarshaledSignature { // Legacy ethereum (pre-eip-155) adds 27 to v v = vInt - 27 } else { - // v still can be chainId * 2 + 35 for non-legacy transactions (chaiId >=0) + // v still can be `{0, 1} + chainId * 2 + 35` for non-legacy transactions (chainId >=0) if vInt >= 35 { - let vRecovered = UInt64(vBytes) - (chainIdInt * 2 + 35) - v = try! UInt8(vRecovered % 256) + let vRecovered = UInt64(vBytes) - (chainIdInt * 2 + 35) % 256 + v = try! UInt8(vRecovered) } else { v = vInt } @@ -138,3 +138,4 @@ extension SECP256K1.UnmarshaledSignature { return (v, r, s) } } +