accounts,signer: better support for EIP-191 intended validator (#19523)

This commit is contained in:
Martin Holst Swende 2019-05-15 21:26:07 +02:00 committed by GitHub
parent b548b5aeb0
commit 0c5f8c078a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 8 deletions

@ -36,7 +36,7 @@ type Account struct {
} }
const ( const (
MimetypeTextWithValidator = "text/validator" MimetypeDataWithValidator = "data/validator"
MimetypeTypedData = "data/typed" MimetypeTypedData = "data/typed"
MimetypeClique = "application/x-clique-header" MimetypeClique = "application/x-clique-header"
MimetypeTextPlain = "text/plain" MimetypeTextPlain = "text/plain"

@ -46,8 +46,8 @@ type SigFormat struct {
} }
var ( var (
TextValidator = SigFormat{ IntendedValidator = SigFormat{
accounts.MimetypeTextWithValidator, accounts.MimetypeDataWithValidator,
0x00, 0x00,
} }
DataTyped = SigFormat{ DataTyped = SigFormat{
@ -191,7 +191,7 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType
} }
switch mediaType { switch mediaType {
case TextValidator.Mime: case IntendedValidator.Mime:
// Data with an intended validator // Data with an intended validator
validatorData, err := UnmarshalValidatorData(data) validatorData, err := UnmarshalValidatorData(data)
if err != nil { if err != nil {
@ -200,9 +200,24 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType
sighash, msg := SignTextValidator(validatorData) sighash, msg := SignTextValidator(validatorData)
message := []*NameValueType{ message := []*NameValueType{
{ {
Name: "message", Name: "This is a request to sign data intended for a particular validator (see EIP 191 version 0)",
Typ: "text", Typ: "description",
Value: msg, Value: "",
},
{
Name: "Intended validator address",
Typ: "address",
Value: validatorData.Address.String(),
},
{
Name: "Application-specific data",
Typ: "hexdata",
Value: validatorData.Message,
},
{
Name: "Full message for signing",
Typ: "hexdata",
Value: fmt.Sprintf("0x%x", msg),
}, },
} }
req = &SignDataRequest{ContentType: mediaType, Rawdata: []byte(msg), Message: message, Hash: sighash} req = &SignDataRequest{ContentType: mediaType, Rawdata: []byte(msg), Message: message, Hash: sighash}
@ -275,7 +290,6 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType
// hash = keccak256("\x19\x00"${address}${data}). // hash = keccak256("\x19\x00"${address}${data}).
func SignTextValidator(validatorData ValidatorData) (hexutil.Bytes, string) { func SignTextValidator(validatorData ValidatorData) (hexutil.Bytes, string) {
msg := fmt.Sprintf("\x19\x00%s%s", string(validatorData.Address.Bytes()), string(validatorData.Message)) msg := fmt.Sprintf("\x19\x00%s%s", string(validatorData.Address.Bytes()), string(validatorData.Message))
fmt.Printf("SignTextValidator:%s\n", msg)
return crypto.Keccak256([]byte(msg)), msg return crypto.Keccak256([]byte(msg)), msg
} }