signer: make ui use new message format for signing

This commit is contained in:
Martin Holst Swende 2018-12-03 13:46:46 +01:00 committed by Paul Berg
parent 5f45cdc9fb
commit c182e18fb3
3 changed files with 37 additions and 10 deletions

View file

@ -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"`

View file

@ -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")

View file

@ -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())