Skip to content

Commit b170bac

Browse files
authored
Merge pull request #12 from rarimo/fix/digest-packing
* fix: build message digest with solidity abi encoding * fix: build message digest with solidity abi encoding, remove abi building stuff, use just buffer with bytes padding
2 parents 74af7c5 + 36392da commit b170bac

File tree

1 file changed

+25
-12
lines changed

1 file changed

+25
-12
lines changed

internal/service/api/handlers/get_signed_state.go

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package handlers
22

33
import (
4+
"bytes"
45
"encoding/hex"
56
"math/big"
67
"net/http"
78

9+
"github.com/ethereum/go-ethereum/common"
810
"github.com/ethereum/go-ethereum/crypto"
911
"github.com/rarimo/proof-verification-relayer/internal/data"
1012
"github.com/rarimo/proof-verification-relayer/internal/service/api/requests"
@@ -66,6 +68,20 @@ func GetSignedState(w http.ResponseWriter, r *http.Request) {
6668
}
6769

6870
func signState(state data.State, r *http.Request) ([]byte, error) {
71+
digest, err := buildMessageDigest(state, r)
72+
if err != nil {
73+
return nil, errors.Wrap(err, "failed to build message digest")
74+
}
75+
76+
signature, err := crypto.Sign(digest, Config(r).NetworkConfig().PrivateKey)
77+
if err != nil {
78+
return nil, errors.Wrap(err, "failed to sign state")
79+
}
80+
81+
return signature, nil
82+
}
83+
84+
func buildMessageDigest(state data.State, r *http.Request) ([]byte, error) {
6985
rootBytes, err := hex.DecodeString(state.Root)
7086
if err != nil {
7187
return nil, errors.Wrap(err, "failed to decode signature digest", logan.F{"root": state.Root})
@@ -78,18 +94,15 @@ func signState(state data.State, r *http.Request) ([]byte, error) {
7894
// newRoot_,
7995
// transitionTimestamp_
8096
//));
81-
digest := crypto.Keccak256(
82-
[]byte(Config(r).Replicator().RootPrefix),
83-
Config(r).Replicator().SourceSMT.Bytes(),
84-
Config(r).Replicator().Address.Bytes(),
85-
rootBytes,
86-
new(big.Int).SetUint64(state.Timestamp).Bytes(),
87-
)
8897

89-
signature, err := crypto.Sign(digest, Config(r).NetworkConfig().PrivateKey)
90-
if err != nil {
91-
return nil, errors.Wrap(err, "failed to sign state")
92-
}
98+
replicator := Config(r).Replicator()
99+
var msgBuf bytes.Buffer
93100

94-
return signature, nil
101+
msgBuf.Write([]byte(replicator.RootPrefix))
102+
msgBuf.Write(replicator.SourceSMT.Bytes())
103+
msgBuf.Write(replicator.Address.Bytes())
104+
msgBuf.Write(rootBytes)
105+
msgBuf.Write(common.LeftPadBytes(new(big.Int).SetUint64(state.Timestamp).Bytes(), 32))
106+
107+
return crypto.Keccak256(msgBuf.Bytes()), nil
95108
}

0 commit comments

Comments
 (0)