@@ -6113,7 +6113,15 @@ extension Web3.Utils {
61136113 if signature. count != 65 { return nil }
61146114 let rData = signature [ 0 ..< 32 ] . bytes
61156115 let sData = signature [ 32 ..< 64 ] . bytes
6116- let vData = signature [ 64 ]
6116+ var vData = signature [ 64 ]
6117+ if vData >= 27 && vData <= 30 {
6118+ vData -= 27
6119+ } else if vData >= 31 && vData <= 34 {
6120+ vData -= 31
6121+ } else if vData >= 35 && vData <= 38 {
6122+ vData -= 35
6123+ }
6124+
61176125 guard let signatureData = SECP256K1 . marshalSignature ( v: vData, r: rData, s: sData) else { return nil }
61186126 guard let hash = Web3 . Utils. hashPersonalMessage ( personalMessage) else { return nil }
61196127 guard let publicKey = SECP256K1 . recoverPublicKey ( hash: hash, signature: signatureData) else { return nil }
@@ -6129,7 +6137,14 @@ extension Web3.Utils {
61296137 if signature. count != 65 { return nil }
61306138 let rData = signature [ 0 ..< 32 ] . bytes
61316139 let sData = signature [ 32 ..< 64 ] . bytes
6132- let vData = signature [ 64 ]
6140+ var vData = signature [ 64 ]
6141+ if vData >= 27 && vData <= 30 {
6142+ vData -= 27
6143+ } else if vData >= 31 && vData <= 34 {
6144+ vData -= 31
6145+ } else if vData >= 35 && vData <= 38 {
6146+ vData -= 35
6147+ }
61336148 guard let signatureData = SECP256K1 . marshalSignature ( v: vData, r: rData, s: sData) else { return nil }
61346149 guard let publicKey = SECP256K1 . recoverPublicKey ( hash: hash, signature: signatureData) else { return nil }
61356150 return Web3 . Utils. publicToAddress ( publicKey)
0 commit comments