From 2c9fde604403cafc7eae6d33d2e409df55c96a7d Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Mon, 3 Dec 2018 13:46:46 +0100 Subject: [PATCH] signer: make ui use new message format for signing --- signer/core/api.go | 7 ++++--- signer/core/cliui.go | 6 +++++- signer/core/signed_data.go | 34 ++++++++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/signer/core/api.go b/signer/core/api.go index 49532f6ac4..16968f7ad8 100644 --- a/signer/core/api.go +++ b/signer/core/api.go @@ -176,9 +176,10 @@ type ( ContentType string `json:"content_type"` Address common.MixedcaseAddress `json:"address"` Rawdata interface{} `json:"raw_data"` - Message string `json:"message"` - Hash hexutil.Bytes `json:"hash"` - Meta Metadata `json:"meta"` + //Message string `json:"message"` + Message []*NameValueType `json:"message"` + Hash hexutil.Bytes `json:"hash"` + Meta Metadata `json:"meta"` } SignDataResponse struct { Approved bool `json:"approved"` diff --git a/signer/core/cliui.go b/signer/core/cliui.go index 035d4f2016..9c5250c4ef 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -164,7 +164,11 @@ func (ui *CommandlineUI) ApproveSignData(request *SignDataRequest) (SignDataResp fmt.Printf("-------- Sign data request--------------\n") fmt.Printf("Account: %s\n", request.Address.String()) - fmt.Printf("message: \n%v\n", request.Message) + fmt.Printf("message:\n") + for _, nvt := range request.Message { + fmt.Printf("%v\n", nvt.Pprint(1)) + } + //fmt.Printf("message: \n%v\n", request.Message) fmt.Printf("raw data: \n%v\n", request.Rawdata) fmt.Printf("message hash: %v\n", request.Hash) fmt.Printf("-------------------------------------------\n") diff --git a/signer/core/signed_data.go b/signer/core/signed_data.go index e5ba64eab2..bcf77e4650 100644 --- a/signer/core/signed_data.go +++ b/signer/core/signed_data.go @@ -168,7 +168,14 @@ func (api *SignerAPI) determineSignatureFormat(contentType string, addr common.M return nil, err } sighash, msg := SignTextValidator(validatorData) - req = &SignDataRequest{ContentType: mediaType, Rawdata: validatorData, Message: msg, Hash: sighash} + message := []*NameValueType{ + &NameValueType{ + Name: "message", + Typ: "text", + Value: msg, + }, + } + req = &SignDataRequest{ContentType: mediaType, Rawdata: validatorData, Message: message, Hash: sighash} case ApplicationClique.Mime: // Clique is the Ethereum PoA standard cliqueData, err := hexutil.Decode(data.(string)) @@ -183,8 +190,14 @@ func (api *SignerAPI) determineSignatureFormat(contentType string, addr common.M if err != nil { return nil, err } - msg := fmt.Sprintf("clique block %d [0x%x]", header.Number, header.Hash()) - req = &SignDataRequest{ContentType: mediaType, Rawdata: cliqueData, Message: msg, Hash: sighash} + message := []*NameValueType{ + &NameValueType{ + Name: "Clique block", + Typ: "clique", + Value: fmt.Sprintf("clique block %d [0x%x]", header.Number, header.Hash()), + }, + } + req = &SignDataRequest{ContentType: mediaType, Rawdata: cliqueData, Message: message, Hash: sighash} case TextPlain.Mime: // Calculates an Ethereum ECDSA signature for: // hash = keccak256("\x19${byteVersion}Ethereum Signed Message:\n${message length}${message}") @@ -193,7 +206,15 @@ func (api *SignerAPI) determineSignatureFormat(contentType string, addr common.M return nil, err } sighash, msg := SignTextPlain(plainData) - req = &SignDataRequest{ContentType: mediaType, Rawdata: plainData, Message: msg, Hash: sighash} + message := []*NameValueType{ + &NameValueType{ + Name: "message", + Typ: "text/plain", + Value: msg, + }, + } + + req = &SignDataRequest{ContentType: mediaType, Rawdata: plainData, Message: message, Hash: sighash} default: return nil, fmt.Errorf("content type '%s' not implemented for signing", contentType) } @@ -270,8 +291,9 @@ func (api *SignerAPI) SignTypedData(ctx context.Context, addr common.MixedcaseAd return nil, err } sighash := crypto.Keccak256([]byte(fmt.Sprintf("\x19\x01%s%s", string(domainSeparator), string(typedDataHash)))) - output := typedData.PrettyPrint() - req := &SignDataRequest{ContentType: DataTyped.Mime, Rawdata: typedData.Map(), Message: output, Hash: sighash} + //output := typedData.PrettyPrint() + message := typedData.Format() + req := &SignDataRequest{ContentType: DataTyped.Mime, Rawdata: typedData.Map(), Message: message, Hash: sighash} signature, err := api.Sign(ctx, addr, req) if err != nil { api.UI.ShowError(err.Error())