add unblock puk

This commit is contained in:
Michele Balistreri 2021-10-21 10:41:20 +03:00
parent 22e2f8a743
commit 27fc2264db
No known key found for this signature in database
GPG Key ID: E9567DA33A4F791A
3 changed files with 52 additions and 1 deletions

View File

@ -109,7 +109,44 @@ func (f *KeycardFlow) openSC(kc *keycardContext) error {
}
func (f *KeycardFlow) unblockPUK(kc *keycardContext) error {
return errors.New("not yet implemented")
pukError := ""
var err error
newPIN, pinOK := f.params[NewPIN]
puk, pukOK := f.params[PUK]
if pinOK && pukOK {
err = kc.unblockPUK(puk.(string), newPIN.(string))
if err == nil {
f.cardInfo.pinRetries = maxPINRetries
f.cardInfo.pukRetries = maxPUKRetries
f.params[PIN] = newPIN
delete(f.params, NewPIN)
delete(f.params, PUK)
return nil
} else if isSCardError(err) {
return restartErr()
} else if leftRetries, ok := getPinRetries(err); ok {
f.cardInfo.pukRetries = leftRetries
delete(f.params, PUK)
pukOK = false
}
pukError = PUK
}
if !pukOK {
err = f.pauseAndWait(EnterPUK, pukError)
} else if !pinOK {
err = f.pauseAndWait(EnterNewPIN, "")
}
if err != nil {
return err
}
return f.unblockPUK(kc)
}
func (f *KeycardFlow) authenticate(kc *keycardContext) error {
@ -132,6 +169,7 @@ func (f *KeycardFlow) authenticate(kc *keycardContext) error {
return restartErr()
} else if leftRetries, ok := getPinRetries(err); ok {
f.cardInfo.pinRetries = leftRetries
delete(f.params, PIN)
}
pinError = PIN

View File

@ -42,6 +42,10 @@ const (
SwapCard = "keycard.action.swap-card"
EnterPairing = "keycard.action.enter-pairing"
EnterPIN = "keycard.action.enter-pin"
EnterPUK = "keycard.action.enter-puk"
EnterNewPair = "keycard.action.enter-new-pairing"
EnterNewPIN = "keycard.action.enter-new-pin"
EnterNewPUK = "keycard.action.enter-new-puk"
)
const (
@ -63,7 +67,11 @@ const (
PINRetries = "pin-retries"
PUKRetries = "puk-retries"
PairingPass = "pairing-pass"
NewPairing = "new- pairing-pass"
PIN = "pin"
NewPIN = "new-pin"
PUK = "puk"
NewPUK = "new-puk"
MasterKey = "master-key"
WalleRootKey = "wallet-root-key"
WalletKey = "wallet-key"

View File

@ -1,6 +1,7 @@
package statuskeycardgo
import (
"errors"
"fmt"
"github.com/ebfe/scard"
@ -218,6 +219,10 @@ func (kc *keycardContext) verifyPin(pin string) error {
return nil
}
func (kc *keycardContext) unblockPUK(puk string, newPin string) error {
return errors.New("not implemented yet")
}
func (kc *keycardContext) generateKey() ([]byte, error) {
<-kc.connected
if kc.runErr != nil {