mirror of https://github.com/status-im/op-geth.git
accounts,signer: better support for EIP-191 intended validator (#19523)
This commit is contained in:
parent
b548b5aeb0
commit
0c5f8c078a
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue