|
|
@ -635,7 +635,7 @@ func (w *Wallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainSt |
|
|
|
w.deriveChain = chain |
|
|
|
w.deriveChain = chain |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// SignHash requests the wallet to sign the given hash.
|
|
|
|
// SignData requests the wallet to sign the hash of the given data.
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// It looks up the account specified either solely via its address contained within,
|
|
|
|
// It looks up the account specified either solely via its address contained within,
|
|
|
|
// or optionally with the aid of any location metadata from the embedded URL field.
|
|
|
|
// or optionally with the aid of any location metadata from the embedded URL field.
|
|
|
@ -644,9 +644,13 @@ func (w *Wallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainSt |
|
|
|
// a password to decrypt the account, or a PIN code o verify the transaction),
|
|
|
|
// a password to decrypt the account, or a PIN code o verify the transaction),
|
|
|
|
// an AuthNeededError instance will be returned, containing infos for the user
|
|
|
|
// an AuthNeededError instance will be returned, containing infos for the user
|
|
|
|
// about which fields or actions are needed. The user may retry by providing
|
|
|
|
// about which fields or actions are needed. The user may retry by providing
|
|
|
|
// the needed details via SignHashWithPassphrase, or by other means (e.g. unlock
|
|
|
|
// the needed details via SignDataWithPassphrase, or by other means (e.g. unlock
|
|
|
|
// the account in a keystore).
|
|
|
|
// the account in a keystore).
|
|
|
|
func (w *Wallet) SignHash(account accounts.Account, hash []byte) ([]byte, error) { |
|
|
|
func (w *Wallet) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) { |
|
|
|
|
|
|
|
return w.signHash(account, crypto.Keccak256(data)) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (w *Wallet) signHash(account accounts.Account, hash []byte) ([]byte, error) { |
|
|
|
w.lock.Lock() |
|
|
|
w.lock.Lock() |
|
|
|
defer w.lock.Unlock() |
|
|
|
defer w.lock.Unlock() |
|
|
|
|
|
|
|
|
|
|
@ -672,26 +676,51 @@ func (w *Wallet) SignHash(account accounts.Account, hash []byte) ([]byte, error) |
|
|
|
func (w *Wallet) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { |
|
|
|
func (w *Wallet) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { |
|
|
|
signer := types.NewEIP155Signer(chainID) |
|
|
|
signer := types.NewEIP155Signer(chainID) |
|
|
|
hash := signer.Hash(tx) |
|
|
|
hash := signer.Hash(tx) |
|
|
|
sig, err := w.SignHash(account, hash[:]) |
|
|
|
sig, err := w.signHash(account, hash[:]) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
} |
|
|
|
return tx.WithSignature(signer, sig) |
|
|
|
return tx.WithSignature(signer, sig) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// SignHashWithPassphrase requests the wallet to sign the given hash with the
|
|
|
|
// SignDataWithPassphrase requests the wallet to sign the given hash with the
|
|
|
|
// given passphrase as extra authentication information.
|
|
|
|
// given passphrase as extra authentication information.
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// It looks up the account specified either solely via its address contained within,
|
|
|
|
// It looks up the account specified either solely via its address contained within,
|
|
|
|
// or optionally with the aid of any location metadata from the embedded URL field.
|
|
|
|
// or optionally with the aid of any location metadata from the embedded URL field.
|
|
|
|
func (w *Wallet) SignHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) { |
|
|
|
func (w *Wallet) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) { |
|
|
|
|
|
|
|
return w.signHashWithPassphrase(account, passphrase, crypto.Keccak256(data)) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (w *Wallet) signHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) { |
|
|
|
if !w.session.verified { |
|
|
|
if !w.session.verified { |
|
|
|
if err := w.Open(passphrase); err != nil { |
|
|
|
if err := w.Open(passphrase); err != nil { |
|
|
|
return nil, err |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return w.SignHash(account, hash) |
|
|
|
return w.signHash(account, hash) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// SignText requests the wallet to sign the hash of a given piece of data, prefixed
|
|
|
|
|
|
|
|
// by the Ethereum prefix scheme
|
|
|
|
|
|
|
|
// It looks up the account specified either solely via its address contained within,
|
|
|
|
|
|
|
|
// or optionally with the aid of any location metadata from the embedded URL field.
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// If the wallet requires additional authentication to sign the request (e.g.
|
|
|
|
|
|
|
|
// a password to decrypt the account, or a PIN code o verify the transaction),
|
|
|
|
|
|
|
|
// an AuthNeededError instance will be returned, containing infos for the user
|
|
|
|
|
|
|
|
// about which fields or actions are needed. The user may retry by providing
|
|
|
|
|
|
|
|
// the needed details via SignHashWithPassphrase, or by other means (e.g. unlock
|
|
|
|
|
|
|
|
// the account in a keystore).
|
|
|
|
|
|
|
|
func (w *Wallet) SignText(account accounts.Account, text []byte) ([]byte, error) { |
|
|
|
|
|
|
|
return w.signHash(account, accounts.TextHash(text)) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// SignTextWithPassphrase implements accounts.Wallet, attempting to sign the
|
|
|
|
|
|
|
|
// given hash with the given account using passphrase as extra authentication
|
|
|
|
|
|
|
|
func (w *Wallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) { |
|
|
|
|
|
|
|
return w.signHashWithPassphrase(account, passphrase, crypto.Keccak256(accounts.TextHash(text))) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// SignTxWithPassphrase requests the wallet to sign the given transaction, with the
|
|
|
|
// SignTxWithPassphrase requests the wallet to sign the given transaction, with the
|
|
|
|