mirror of
https://github.com/status-im/status-keycard-go.git
synced 2025-02-23 19:48:24 +00:00
add mnemonic generation
This commit is contained in:
parent
a0679327f8
commit
c86dd29a2e
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
.vscode
|
||||
/keycard
|
||||
/build
|
||||
/status-keycard-go
|
||||
|
@ -48,6 +48,9 @@ func signalHandler(j []byte) {
|
||||
case skg.EnterNewPair:
|
||||
fmt.Printf("Creating pairing: %+v\n", correctPairing)
|
||||
flow.Resume(skg.FlowParams{skg.NewPairing: correctPairing})
|
||||
case skg.EnterMnemonic:
|
||||
fmt.Printf("Loading mnemonic\n")
|
||||
flow.Resume(skg.FlowParams{skg.Mnemonic: "receive fan copper bracket end train again sustain wet siren throw cigar"})
|
||||
case skg.FlowResult:
|
||||
fmt.Printf("Flow result: %+v\n", sig.Event)
|
||||
close(finished)
|
||||
@ -98,7 +101,7 @@ func main() {
|
||||
signal.SetKeycardSignalHandler(signalHandler)
|
||||
|
||||
testFlow(skg.GetAppInfo, skg.FlowParams{skg.FactoryReset: true})
|
||||
testFlow(skg.LoadAccount, skg.FlowParams{skg.Mnemonic: "receive fan copper bracket end train again sustain wet siren throw cigar"})
|
||||
testFlow(skg.LoadAccount, skg.FlowParams{skg.MnemonicLen: 12})
|
||||
testFlow(skg.UnpairThis, skg.FlowParams{skg.PIN: correctPIN})
|
||||
testFlow(skg.RecoverAccount, skg.FlowParams{skg.PairingPass: "WrongPass", skg.PIN: "234567"})
|
||||
testFlow(skg.Login, skg.FlowParams{skg.KeyUID: "60a78c98d5dd659f714eb7072bfb2c0d8a65f74a8f6aff7bb27cf56ae1feec17"})
|
||||
|
14
flow.go
14
flow.go
@ -105,9 +105,7 @@ func (f *KeycardFlow) runFlow() {
|
||||
f.state = Idle
|
||||
}
|
||||
|
||||
func (f *KeycardFlow) pause(action string, errMsg string) {
|
||||
status := FlowParams{}
|
||||
|
||||
func (f *KeycardFlow) pause(action string, errMsg string, status FlowParams) {
|
||||
status[ErrorKey] = errMsg
|
||||
|
||||
if f.cardInfo.freeSlots != -1 {
|
||||
@ -125,12 +123,12 @@ func (f *KeycardFlow) pause(action string, errMsg string) {
|
||||
f.state = Paused
|
||||
}
|
||||
|
||||
func (f *KeycardFlow) pauseAndWait(action string, errMsg string) error {
|
||||
func (f *KeycardFlow) pauseAndWaitWithStatus(action string, errMsg string, status FlowParams) error {
|
||||
if f.state == Cancelling {
|
||||
return giveupErr()
|
||||
}
|
||||
|
||||
f.pause(action, errMsg)
|
||||
f.pause(action, errMsg, status)
|
||||
<-f.wakeUp
|
||||
|
||||
if f.state == Resuming {
|
||||
@ -141,6 +139,10 @@ func (f *KeycardFlow) pauseAndWait(action string, errMsg string) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (f *KeycardFlow) pauseAndWait(action string, errMsg string) error {
|
||||
return f.pauseAndWaitWithStatus(action, errMsg, FlowParams{})
|
||||
}
|
||||
|
||||
func (f *KeycardFlow) pauseAndRestart(action string, errMsg string) error {
|
||||
err := f.pauseAndWait(action, errMsg)
|
||||
|
||||
@ -184,7 +186,7 @@ func (f *KeycardFlow) connect() *keycardContext {
|
||||
return nil
|
||||
}
|
||||
|
||||
f.pause(InsertCard, ErrorConnection)
|
||||
f.pause(InsertCard, ErrorConnection, FlowParams{})
|
||||
select {
|
||||
case <-f.wakeUp:
|
||||
if f.state != Cancelling {
|
||||
|
@ -311,7 +311,20 @@ func (f *KeycardFlow) loadKeys(kc *keycardContext) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
err := f.pauseAndWait(EnterMnemonic, ErrorLoading)
|
||||
mnemonicLength, ok := f.params[MnemonicLen]
|
||||
if !ok {
|
||||
mnemonicLength = defMnemoLen
|
||||
}
|
||||
|
||||
indexes, err := kc.generateMnemonic(mnemonicLength.(int) / 3)
|
||||
|
||||
if isSCardError(err) {
|
||||
return restartErr()
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = f.pauseAndWaitWithStatus(EnterMnemonic, ErrorLoading, FlowParams{MnemonicIdxs: indexes})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -105,6 +105,8 @@ const (
|
||||
EncKey = "encryption-key"
|
||||
ExportedKey = "exported-key"
|
||||
Mnemonic = "mnemonic"
|
||||
MnemonicLen = "mnemonic-length"
|
||||
MnemonicIdxs = "mnemonic-indexes"
|
||||
TXHash = "tx-hash"
|
||||
BIP44Path = "bip44-path"
|
||||
TXSignature = "tx-signature"
|
||||
@ -115,6 +117,7 @@ const (
|
||||
maxPINRetries = 3
|
||||
maxPUKRetries = 5
|
||||
maxFreeSlots = 5
|
||||
defMnemoLen = 12
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -237,6 +237,7 @@ func (kc *keycardContext) unblockPIN(puk string, newPIN string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
//lint:ignore U1000 will be used
|
||||
func (kc *keycardContext) generateKey() ([]byte, error) {
|
||||
<-kc.connected
|
||||
if kc.runErr != nil {
|
||||
@ -293,6 +294,7 @@ func (kc *keycardContext) removeKey() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
//lint:ignore U1000 will be used
|
||||
func (kc *keycardContext) deriveKey(path string) error {
|
||||
<-kc.connected
|
||||
if kc.runErr != nil {
|
||||
|
Loading…
x
Reference in New Issue
Block a user