accounts,signer: better support for EIP-191 intended validator (#19523)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							b548b5aeb0
						
					
				
				
					commit
					0c5f8c078a
				
			@@ -36,7 +36,7 @@ type Account struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	MimetypeTextWithValidator = "text/validator"
 | 
			
		||||
	MimetypeDataWithValidator = "data/validator"
 | 
			
		||||
	MimetypeTypedData         = "data/typed"
 | 
			
		||||
	MimetypeClique            = "application/x-clique-header"
 | 
			
		||||
	MimetypeTextPlain         = "text/plain"
 | 
			
		||||
 
 | 
			
		||||
@@ -46,8 +46,8 @@ type SigFormat struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	TextValidator = SigFormat{
 | 
			
		||||
		accounts.MimetypeTextWithValidator,
 | 
			
		||||
	IntendedValidator = SigFormat{
 | 
			
		||||
		accounts.MimetypeDataWithValidator,
 | 
			
		||||
		0x00,
 | 
			
		||||
	}
 | 
			
		||||
	DataTyped = SigFormat{
 | 
			
		||||
@@ -191,7 +191,7 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch mediaType {
 | 
			
		||||
	case TextValidator.Mime:
 | 
			
		||||
	case IntendedValidator.Mime:
 | 
			
		||||
		// Data with an intended validator
 | 
			
		||||
		validatorData, err := UnmarshalValidatorData(data)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -200,9 +200,24 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType
 | 
			
		||||
		sighash, msg := SignTextValidator(validatorData)
 | 
			
		||||
		message := []*NameValueType{
 | 
			
		||||
			{
 | 
			
		||||
				Name:  "message",
 | 
			
		||||
				Typ:   "text",
 | 
			
		||||
				Value: msg,
 | 
			
		||||
				Name:  "This is a request to sign data intended for a particular validator (see EIP 191 version 0)",
 | 
			
		||||
				Typ:   "description",
 | 
			
		||||
				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}
 | 
			
		||||
@@ -275,7 +290,6 @@ func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType
 | 
			
		||||
// hash = keccak256("\x19\x00"${address}${data}).
 | 
			
		||||
func SignTextValidator(validatorData ValidatorData) (hexutil.Bytes, string) {
 | 
			
		||||
	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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user