mirror of
https://github.com/LBRYFoundation/lbcwallet.git
synced 2025-08-23 17:47:29 +00:00
wallet: add call to modify both public and private passphrases atomically
This commit is contained in:
parent
0547e5a313
commit
8b2aebe89e
1 changed files with 60 additions and 10 deletions
|
@ -96,6 +96,7 @@ type Wallet struct {
|
||||||
holdUnlockRequests chan chan heldUnlock
|
holdUnlockRequests chan chan heldUnlock
|
||||||
lockState chan bool
|
lockState chan bool
|
||||||
changePassphrase chan changePassphraseRequest
|
changePassphrase chan changePassphraseRequest
|
||||||
|
changePassphrases chan changePassphrasesRequest
|
||||||
|
|
||||||
// Information for reorganization handling.
|
// Information for reorganization handling.
|
||||||
reorganizingLock sync.Mutex
|
reorganizingLock sync.Mutex
|
||||||
|
@ -614,6 +615,13 @@ type (
|
||||||
|
|
||||||
changePassphraseRequest struct {
|
changePassphraseRequest struct {
|
||||||
old, new []byte
|
old, new []byte
|
||||||
|
private bool
|
||||||
|
err chan error
|
||||||
|
}
|
||||||
|
|
||||||
|
changePassphrasesRequest struct {
|
||||||
|
publicOld, publicNew []byte
|
||||||
|
privateOld, privateNew []byte
|
||||||
err chan error
|
err chan error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -654,8 +662,29 @@ out:
|
||||||
case req := <-w.changePassphrase:
|
case req := <-w.changePassphrase:
|
||||||
err := walletdb.Update(w.db, func(tx walletdb.ReadWriteTx) error {
|
err := walletdb.Update(w.db, func(tx walletdb.ReadWriteTx) error {
|
||||||
addrmgrNs := tx.ReadWriteBucket(waddrmgrNamespaceKey)
|
addrmgrNs := tx.ReadWriteBucket(waddrmgrNamespaceKey)
|
||||||
return w.Manager.ChangePassphrase(addrmgrNs, req.old,
|
return w.Manager.ChangePassphrase(
|
||||||
req.new, true, &waddrmgr.DefaultScryptOptions)
|
addrmgrNs, req.old, req.new, req.private,
|
||||||
|
&waddrmgr.DefaultScryptOptions,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
req.err <- err
|
||||||
|
continue
|
||||||
|
|
||||||
|
case req := <-w.changePassphrases:
|
||||||
|
err := walletdb.Update(w.db, func(tx walletdb.ReadWriteTx) error {
|
||||||
|
addrmgrNs := tx.ReadWriteBucket(waddrmgrNamespaceKey)
|
||||||
|
err := w.Manager.ChangePassphrase(
|
||||||
|
addrmgrNs, req.publicOld, req.publicNew,
|
||||||
|
false, &waddrmgr.DefaultScryptOptions,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return w.Manager.ChangePassphrase(
|
||||||
|
addrmgrNs, req.privateOld, req.privateNew,
|
||||||
|
true, &waddrmgr.DefaultScryptOptions,
|
||||||
|
)
|
||||||
})
|
})
|
||||||
req.err <- err
|
req.err <- err
|
||||||
continue
|
continue
|
||||||
|
@ -766,6 +795,7 @@ func (w *Wallet) ChangePrivatePassphrase(old, new []byte) error {
|
||||||
w.changePassphrase <- changePassphraseRequest{
|
w.changePassphrase <- changePassphraseRequest{
|
||||||
old: old,
|
old: old,
|
||||||
new: new,
|
new: new,
|
||||||
|
private: true,
|
||||||
err: err,
|
err: err,
|
||||||
}
|
}
|
||||||
return <-err
|
return <-err
|
||||||
|
@ -773,11 +803,30 @@ func (w *Wallet) ChangePrivatePassphrase(old, new []byte) error {
|
||||||
|
|
||||||
// ChangePublicPassphrase modifies the public passphrase of the wallet.
|
// ChangePublicPassphrase modifies the public passphrase of the wallet.
|
||||||
func (w *Wallet) ChangePublicPassphrase(old, new []byte) error {
|
func (w *Wallet) ChangePublicPassphrase(old, new []byte) error {
|
||||||
return walletdb.Update(w.db, func(tx walletdb.ReadWriteTx) error {
|
err := make(chan error, 1)
|
||||||
addrmgrNs := tx.ReadWriteBucket(waddrmgrNamespaceKey)
|
w.changePassphrase <- changePassphraseRequest{
|
||||||
return w.Manager.ChangePassphrase(addrmgrNs, old, new, false,
|
old: old,
|
||||||
&waddrmgr.DefaultScryptOptions)
|
new: new,
|
||||||
})
|
private: false,
|
||||||
|
err: err,
|
||||||
|
}
|
||||||
|
return <-err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChangePassphrases modifies the public and private passphrase of the wallet
|
||||||
|
// atomically.
|
||||||
|
func (w *Wallet) ChangePassphrases(publicOld, publicNew, privateOld,
|
||||||
|
privateNew []byte) error {
|
||||||
|
|
||||||
|
err := make(chan error, 1)
|
||||||
|
w.changePassphrases <- changePassphrasesRequest{
|
||||||
|
publicOld: publicOld,
|
||||||
|
publicNew: publicNew,
|
||||||
|
privateOld: privateOld,
|
||||||
|
privateNew: privateNew,
|
||||||
|
err: err,
|
||||||
|
}
|
||||||
|
return <-err
|
||||||
}
|
}
|
||||||
|
|
||||||
// accountUsed returns whether there are any recorded transactions spending to
|
// accountUsed returns whether there are any recorded transactions spending to
|
||||||
|
@ -2800,6 +2849,7 @@ func Open(db walletdb.DB, pubPass []byte, cbs *waddrmgr.OpenCallbacks, params *c
|
||||||
holdUnlockRequests: make(chan chan heldUnlock),
|
holdUnlockRequests: make(chan chan heldUnlock),
|
||||||
lockState: make(chan bool),
|
lockState: make(chan bool),
|
||||||
changePassphrase: make(chan changePassphraseRequest),
|
changePassphrase: make(chan changePassphraseRequest),
|
||||||
|
changePassphrases: make(chan changePassphrasesRequest),
|
||||||
chainParams: params,
|
chainParams: params,
|
||||||
quit: make(chan struct{}),
|
quit: make(chan struct{}),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue