mirror of
https://github.com/aljazceru/ark.git
synced 2025-12-17 20:24:21 +01:00
* scaffolding wallet * remove wallet db, add loader instead * wip * implement some wallet methods * signing and utxos * renaming * fee estimator * chain source options * config * application service * clark docker-compose * CLI refactor * v0 clark * v0.1 clark * fix SignTapscriptInput (btcwallet) * wallet.Broadcast, send via explora * fix ASP pubkey * Use lnd's btcwallet & Add rpc to get wallet staus * wip * unilateral exit * Fixes on watching for notifications and cli init * handle non-final BIP68 errors * Fixes * Fixes * Fix * a * fix onboard cosigners + revert tree validation * fix covenant e2e tests * fix covenantless e2e tests * fix container naming * fix lint error * update REAME.md * Add env var for wallet password --------- Co-authored-by: altafan <18440657+altafan@users.noreply.github.com>
66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"syscall"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
"golang.org/x/term"
|
|
)
|
|
|
|
func ReadPassword(ctx *cli.Context, verify bool) ([]byte, error) {
|
|
password := []byte(ctx.String("password"))
|
|
|
|
if len(password) == 0 {
|
|
fmt.Print("unlock your wallet with password: ")
|
|
var err error
|
|
password, err = term.ReadPassword(int(syscall.Stdin))
|
|
fmt.Println() // new line
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
}
|
|
|
|
if verify {
|
|
if err := verifyPassword(ctx, password); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return password, nil
|
|
}
|
|
|
|
func HashPassword(password []byte) []byte {
|
|
hash := sha256.Sum256(password)
|
|
return hash[:]
|
|
}
|
|
|
|
func verifyPassword(ctx *cli.Context, password []byte) error {
|
|
state, err := GetState(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
passwordHashString := state[PASSWORD_HASH]
|
|
if len(passwordHashString) <= 0 {
|
|
return fmt.Errorf("missing password hash")
|
|
}
|
|
|
|
passwordHash, err := hex.DecodeString(passwordHashString)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
currentPassHash := HashPassword(password)
|
|
|
|
if !bytes.Equal(passwordHash, currentPassHash) {
|
|
return fmt.Errorf("invalid password")
|
|
}
|
|
|
|
return nil
|
|
}
|