fix(sha3)_: support hex string (#6216) (#6221)

This commit is contained in:
frank 2025-01-03 08:06:02 +08:00 committed by GitHub
parent a4e36d49cd
commit c84a35d384
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 1 deletions

View File

@ -1,14 +1,18 @@
package abispec
import (
"encoding/hex"
"fmt"
"math/big"
"regexp"
"strings"
"unicode"
"go.uber.org/zap"
"github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/logutils"
)
var unicodeZeroPattern = regexp.MustCompile("^(?:\u0000)*")
@ -20,6 +24,8 @@ var addressBasicPattern = regexp.MustCompile("(?i)^(0x)?[0-9a-f]{40}$")
var addressLowerCasePattern = regexp.MustCompile("^(0x|0X)?[0-9a-f]{40}$")
var addressUpperCasePattern = regexp.MustCompile("^(0x|0X)?[0-9A-F]{40}$")
var hexStrictPattern = regexp.MustCompile(`(?i)^((-)?0x[0-9a-f]+|(0x))$`)
func HexToNumber(hex string) string {
num, success := big.NewInt(0).SetString(hex, 16)
if success {
@ -37,7 +43,18 @@ func NumberToHex(numString string) string {
}
func Sha3(str string) string {
bytes := crypto.Keccak256([]byte(str))
var bytes []byte
var err error
if hexStrictPattern.MatchString(str) {
bytes, err = hex.DecodeString(str[2:])
if err != nil {
logutils.ZapLogger().Error("failed to decode hex string when sha3", zap.String("hex", str), zap.Error(err))
return ""
}
} else {
bytes = []byte(str)
}
bytes = crypto.Keccak256(bytes)
return common.Bytes2Hex(bytes)
}

View File

@ -36,6 +36,9 @@ func TestNumberToHex(t *testing.T) {
func TestSha3(t *testing.T) {
require.Equal(t, "48bed44d1bcd124a28c27f343a817e5f5243190d3c52bf347daf876de1dbbf77", Sha3("abcd"))
require.Equal(t, "79bc958fa37445ba1b909c34a73cecfa4966a6e6783f90863dd6df5a80f96ad0", Sha3("12786e7b2111caae36dd91aca91ce627f26fa3c77018a98880ab50a82ac6b6aa835f6bbf96da54aa6b88ceffb8107ef40a4ef8a85bf4eb0e81a9464e0a27fcf3"))
require.Equal(t, "04d874cdee68658bd64a07b6180dd36b735b60876ca79a29f88114bc78e6fc32", Sha3("0x12786e7b2111caae36dd91aca91ce627f26fa3c77018a98880ab50a82ac6b6aa835f6bbf96da54aa6b88ceffb8107ef40a4ef8a85bf4eb0e81a9464e0a27fcf3"))
require.Equal(t, "04d874cdee68658bd64a07b6180dd36b735b60876ca79a29f88114bc78e6fc32", Sha3("0x12786E7b2111caae36dd91aca91ce627f26fa3c77018a98880ab50a82ac6b6aa835f6bbf96da54aa6b88ceffb8107ef40a4ef8a85bf4eb0e81a9464e0a27fcf3"))
}
func TestHexToUtf8(t *testing.T) {