accounts/scwallet: display PUK retry count, validate PIN/PUK length

This commit is contained in:
Guillaume Ballet 2019-05-03 17:17:45 +02:00 committed by Péter Szilágyi
parent fc85777a21
commit 75a860880c
No known key found for this signature in database
GPG Key ID: E9AE538CEDF8293D
1 changed files with 12 additions and 1 deletions

View File

@ -27,6 +27,7 @@ import (
"errors"
"fmt"
"math/big"
"regexp"
"sort"
"strings"
"sync"
@ -310,8 +311,10 @@ func (w *Wallet) Status() (string, error) {
return fmt.Sprintf("Failed: %v", err), err
}
switch {
case !w.session.verified && status.PinRetryCount == 0 && status.PukRetryCount == 0:
return fmt.Sprintf("Bricked, waiting for full wipe"), nil
case !w.session.verified && status.PinRetryCount == 0:
return fmt.Sprintf("Blocked, waiting for PUK and new PIN"), nil
return fmt.Sprintf("Blocked, waiting for PUK (%d attempts left) and new PIN", status.PukRetryCount), nil
case !w.session.verified:
return fmt.Sprintf("Locked, waiting for PIN (%d attempts left)", status.PinRetryCount), nil
case !status.Initialized:
@ -377,10 +380,18 @@ func (w *Wallet) Open(passphrase string) error {
case passphrase == "":
return ErrPINUnblockNeeded
case status.PinRetryCount > 0:
if !regexp.MustCompile(`^[0-9]{6,}$`).MatchString(passphrase) {
w.log.Error("PIN needs to be at least 6 digits")
return ErrPINNeeded
}
if err := w.session.verifyPin([]byte(passphrase)); err != nil {
return err
}
default:
if !regexp.MustCompile(`^[0-9]{12,}$`).MatchString(passphrase) {
w.log.Error("PUK needs to be at least 12 digits")
return ErrPINUnblockNeeded
}
if err := w.session.unblockPin([]byte(passphrase)); err != nil {
return err
}