mirror of
https://github.com/status-im/status-keycard-go.git
synced 2025-02-24 03:58:25 +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
|
/keycard
|
||||||
/build
|
/build
|
||||||
/status-keycard-go
|
/status-keycard-go
|
||||||
|
@ -48,6 +48,9 @@ func signalHandler(j []byte) {
|
|||||||
case skg.EnterNewPair:
|
case skg.EnterNewPair:
|
||||||
fmt.Printf("Creating pairing: %+v\n", correctPairing)
|
fmt.Printf("Creating pairing: %+v\n", correctPairing)
|
||||||
flow.Resume(skg.FlowParams{skg.NewPairing: 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:
|
case skg.FlowResult:
|
||||||
fmt.Printf("Flow result: %+v\n", sig.Event)
|
fmt.Printf("Flow result: %+v\n", sig.Event)
|
||||||
close(finished)
|
close(finished)
|
||||||
@ -98,7 +101,7 @@ func main() {
|
|||||||
signal.SetKeycardSignalHandler(signalHandler)
|
signal.SetKeycardSignalHandler(signalHandler)
|
||||||
|
|
||||||
testFlow(skg.GetAppInfo, skg.FlowParams{skg.FactoryReset: true})
|
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.UnpairThis, skg.FlowParams{skg.PIN: correctPIN})
|
||||||
testFlow(skg.RecoverAccount, skg.FlowParams{skg.PairingPass: "WrongPass", skg.PIN: "234567"})
|
testFlow(skg.RecoverAccount, skg.FlowParams{skg.PairingPass: "WrongPass", skg.PIN: "234567"})
|
||||||
testFlow(skg.Login, skg.FlowParams{skg.KeyUID: "60a78c98d5dd659f714eb7072bfb2c0d8a65f74a8f6aff7bb27cf56ae1feec17"})
|
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
|
f.state = Idle
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *KeycardFlow) pause(action string, errMsg string) {
|
func (f *KeycardFlow) pause(action string, errMsg string, status FlowParams) {
|
||||||
status := FlowParams{}
|
|
||||||
|
|
||||||
status[ErrorKey] = errMsg
|
status[ErrorKey] = errMsg
|
||||||
|
|
||||||
if f.cardInfo.freeSlots != -1 {
|
if f.cardInfo.freeSlots != -1 {
|
||||||
@ -125,12 +123,12 @@ func (f *KeycardFlow) pause(action string, errMsg string) {
|
|||||||
f.state = Paused
|
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 {
|
if f.state == Cancelling {
|
||||||
return giveupErr()
|
return giveupErr()
|
||||||
}
|
}
|
||||||
|
|
||||||
f.pause(action, errMsg)
|
f.pause(action, errMsg, status)
|
||||||
<-f.wakeUp
|
<-f.wakeUp
|
||||||
|
|
||||||
if f.state == Resuming {
|
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 {
|
func (f *KeycardFlow) pauseAndRestart(action string, errMsg string) error {
|
||||||
err := f.pauseAndWait(action, errMsg)
|
err := f.pauseAndWait(action, errMsg)
|
||||||
|
|
||||||
@ -184,7 +186,7 @@ func (f *KeycardFlow) connect() *keycardContext {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
f.pause(InsertCard, ErrorConnection)
|
f.pause(InsertCard, ErrorConnection, FlowParams{})
|
||||||
select {
|
select {
|
||||||
case <-f.wakeUp:
|
case <-f.wakeUp:
|
||||||
if f.state != Cancelling {
|
if f.state != Cancelling {
|
||||||
|
@ -311,7 +311,20 @@ func (f *KeycardFlow) loadKeys(kc *keycardContext) error {
|
|||||||
return nil
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -105,6 +105,8 @@ const (
|
|||||||
EncKey = "encryption-key"
|
EncKey = "encryption-key"
|
||||||
ExportedKey = "exported-key"
|
ExportedKey = "exported-key"
|
||||||
Mnemonic = "mnemonic"
|
Mnemonic = "mnemonic"
|
||||||
|
MnemonicLen = "mnemonic-length"
|
||||||
|
MnemonicIdxs = "mnemonic-indexes"
|
||||||
TXHash = "tx-hash"
|
TXHash = "tx-hash"
|
||||||
BIP44Path = "bip44-path"
|
BIP44Path = "bip44-path"
|
||||||
TXSignature = "tx-signature"
|
TXSignature = "tx-signature"
|
||||||
@ -115,6 +117,7 @@ const (
|
|||||||
maxPINRetries = 3
|
maxPINRetries = 3
|
||||||
maxPUKRetries = 5
|
maxPUKRetries = 5
|
||||||
maxFreeSlots = 5
|
maxFreeSlots = 5
|
||||||
|
defMnemoLen = 12
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -237,6 +237,7 @@ func (kc *keycardContext) unblockPIN(puk string, newPIN string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//lint:ignore U1000 will be used
|
||||||
func (kc *keycardContext) generateKey() ([]byte, error) {
|
func (kc *keycardContext) generateKey() ([]byte, error) {
|
||||||
<-kc.connected
|
<-kc.connected
|
||||||
if kc.runErr != nil {
|
if kc.runErr != nil {
|
||||||
@ -293,6 +294,7 @@ func (kc *keycardContext) removeKey() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//lint:ignore U1000 will be used
|
||||||
func (kc *keycardContext) deriveKey(path string) error {
|
func (kc *keycardContext) deriveKey(path string) error {
|
||||||
<-kc.connected
|
<-kc.connected
|
||||||
if kc.runErr != nil {
|
if kc.runErr != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user