mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 18:32:23 +00:00
signer: remove ecrecover from external API
This commit is contained in:
parent
321de9d86c
commit
5f29628477
3 changed files with 3 additions and 36 deletions
|
|
@ -1,5 +1,8 @@
|
||||||
### Changelog for external API
|
### Changelog for external API
|
||||||
|
|
||||||
|
#### 4.0.0
|
||||||
|
|
||||||
|
* The external `account_Ecrecover`-method was removed.
|
||||||
|
|
||||||
#### 3.0.0
|
#### 3.0.0
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,8 +46,6 @@ type ExternalAPI interface {
|
||||||
SignTransaction(ctx context.Context, args SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error)
|
SignTransaction(ctx context.Context, args SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error)
|
||||||
// Sign - request to sign the given data (plus prefix)
|
// Sign - request to sign the given data (plus prefix)
|
||||||
Sign(ctx context.Context, addr common.MixedcaseAddress, data hexutil.Bytes) (hexutil.Bytes, error)
|
Sign(ctx context.Context, addr common.MixedcaseAddress, data hexutil.Bytes) (hexutil.Bytes, error)
|
||||||
// EcRecover - request to perform ecrecover
|
|
||||||
EcRecover(ctx context.Context, data, sig hexutil.Bytes) (common.Address, error)
|
|
||||||
// Export - request to export an account
|
// Export - request to export an account
|
||||||
Export(ctx context.Context, addr common.Address) (json.RawMessage, error)
|
Export(ctx context.Context, addr common.Address) (json.RawMessage, error)
|
||||||
// Import - request to import an account
|
// Import - request to import an account
|
||||||
|
|
@ -418,32 +416,6 @@ func (api *SignerAPI) Sign(ctx context.Context, addr common.MixedcaseAddress, da
|
||||||
return signature, nil
|
return signature, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// EcRecover returns the address for the Account that was used to create the signature.
|
|
||||||
// Note, this function is compatible with eth_sign and personal_sign. As such it recovers
|
|
||||||
// the address of:
|
|
||||||
// hash = keccak256("\x19Ethereum Signed Message:\n"${message length}${message})
|
|
||||||
// addr = ecrecover(hash, signature)
|
|
||||||
//
|
|
||||||
// Note, the signature must conform to the secp256k1 curve R, S and V values, where
|
|
||||||
// the V value must be 27 or 28 for legacy reasons.
|
|
||||||
//
|
|
||||||
// https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_ecRecover
|
|
||||||
func (api *SignerAPI) EcRecover(ctx context.Context, data, sig hexutil.Bytes) (common.Address, error) {
|
|
||||||
if len(sig) != 65 {
|
|
||||||
return common.Address{}, fmt.Errorf("signature must be 65 bytes long")
|
|
||||||
}
|
|
||||||
if sig[64] != 27 && sig[64] != 28 {
|
|
||||||
return common.Address{}, fmt.Errorf("invalid Ethereum signature (V is not 27 or 28)")
|
|
||||||
}
|
|
||||||
sig[64] -= 27 // Transform yellow paper V from 27/28 to 0/1
|
|
||||||
hash, _ := SignHash(data)
|
|
||||||
rpk, err := crypto.SigToPub(hash, sig)
|
|
||||||
if err != nil {
|
|
||||||
return common.Address{}, err
|
|
||||||
}
|
|
||||||
return crypto.PubkeyToAddress(*rpk), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SignHash is a helper function that calculates a hash for the given message that can be
|
// SignHash is a helper function that calculates a hash for the given message that can be
|
||||||
// safely used to calculate a signature from.
|
// safely used to calculate a signature from.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -71,14 +71,6 @@ func (l *AuditLogger) Sign(ctx context.Context, addr common.MixedcaseAddress, da
|
||||||
return b, e
|
return b, e
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *AuditLogger) EcRecover(ctx context.Context, data, sig hexutil.Bytes) (common.Address, error) {
|
|
||||||
l.log.Info("EcRecover", "type", "request", "metadata", MetadataFromContext(ctx).String(),
|
|
||||||
"data", common.Bytes2Hex(data))
|
|
||||||
a, e := l.api.EcRecover(ctx, data, sig)
|
|
||||||
l.log.Info("EcRecover", "type", "response", "addr", a.String(), "error", e)
|
|
||||||
return a, e
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *AuditLogger) Export(ctx context.Context, addr common.Address) (json.RawMessage, error) {
|
func (l *AuditLogger) Export(ctx context.Context, addr common.Address) (json.RawMessage, error) {
|
||||||
l.log.Info("Export", "type", "request", "metadata", MetadataFromContext(ctx).String(),
|
l.log.Info("Export", "type", "request", "metadata", MetadataFromContext(ctx).String(),
|
||||||
"addr", addr.Hex())
|
"addr", addr.Hex())
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue