110 lines
3.1 KiB
Go
Raw Normal View History

package main
import "C"
import (
2021-10-18 14:50:56 +03:00
"encoding/json"
"fmt"
2021-10-19 12:19:02 +03:00
"os"
"path/filepath"
skg "github.com/status-im/status-keycard-go"
2021-10-18 14:50:56 +03:00
"github.com/status-im/status-keycard-go/signal"
)
2021-10-18 14:50:56 +03:00
var flow *skg.KeycardFlow
var finished chan (struct{})
2022-03-04 09:56:28 +01:00
var correctPairing = "KeycardDefaultPairing"
2021-10-20 11:44:57 +03:00
var correctPIN = "123456"
2021-10-28 09:52:39 +03:00
var correctPUK = "123456123456"
var keyUID = "136cbfc087cf7df6cf3248bce7563d4253b302b2f9e2b5eef8713fa5091409bc"
2021-10-18 14:50:56 +03:00
func signalHandler(j []byte) {
var sig signal.Envelope
json.Unmarshal(j, &sig)
2021-10-20 11:44:57 +03:00
fmt.Printf("Received signal: %+v\n", sig)
2021-10-18 14:50:56 +03:00
go func() {
switch sig.Type {
case skg.InsertCard:
fmt.Print("Insert card\n")
case skg.CardInserted:
fmt.Printf("Card inserted\n")
case skg.SwapCard:
2021-10-28 09:52:39 +03:00
fmt.Printf("Swap card. Changing constraint\n")
flow.Resume(skg.FlowParams{skg.KeyUID: keyUID})
2021-10-19 12:19:02 +03:00
case skg.EnterPairing:
2021-10-28 09:52:39 +03:00
fmt.Printf("Entering pass: %+v\n", correctPairing)
flow.Resume(skg.FlowParams{skg.PairingPass: correctPairing})
2021-10-20 11:44:57 +03:00
case skg.EnterPIN:
fmt.Printf("Entering PIN: %+v\n", correctPIN)
flow.Resume(skg.FlowParams{skg.PIN: correctPIN})
2021-10-28 09:52:39 +03:00
case skg.EnterNewPIN:
fmt.Printf("Creating PIN: %+v\n", correctPIN)
flow.Resume(skg.FlowParams{skg.NewPIN: correctPIN})
case skg.EnterNewPUK:
fmt.Printf("Creating PUK: %+v\n", correctPUK)
flow.Resume(skg.FlowParams{skg.NewPUK: correctPUK})
case skg.EnterNewPair:
fmt.Printf("Creating pairing: %+v\n", correctPairing)
flow.Resume(skg.FlowParams{skg.NewPairing: correctPairing})
2021-10-18 14:50:56 +03:00
case skg.FlowResult:
fmt.Printf("Flow result: %+v\n", sig.Event)
close(finished)
}
}()
}
2021-10-19 12:19:02 +03:00
func testFlow(typ skg.FlowType, params skg.FlowParams) {
finished = make(chan struct{})
err := flow.Start(typ, params)
2021-10-15 12:38:06 +03:00
if err != nil {
fmt.Printf("error: %+v\n", err)
}
2021-10-19 12:19:02 +03:00
<-finished
}
2021-10-18 14:50:56 +03:00
2021-10-19 12:19:02 +03:00
func testRecoverAccount() {
2021-10-18 14:50:56 +03:00
finished = make(chan struct{})
2021-10-19 12:19:02 +03:00
err := flow.Start(skg.RecoverAccount, skg.FlowParams{})
2021-10-15 12:38:06 +03:00
if err != nil {
fmt.Printf("error: %+v\n", err)
}
2021-10-18 10:22:45 +03:00
2021-10-18 14:50:56 +03:00
<-finished
}
2021-10-19 12:19:02 +03:00
func main() {
dir, err := os.MkdirTemp("", "status-keycard-go")
if err != nil {
fmt.Printf("error: %+v\n", err)
return
}
defer os.RemoveAll(dir)
pairingsFile := filepath.Join(dir, "keycard-pairings.json")
flow, err = skg.NewFlow(pairingsFile)
if err != nil {
fmt.Printf("error: %+v\n", err)
return
}
signal.SetKeycardSignalHandler(signalHandler)
2021-10-28 09:52:39 +03:00
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.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"})
2021-10-19 12:19:02 +03:00
testFlow(skg.GetAppInfo, skg.FlowParams{})
2021-10-28 09:52:39 +03:00
testFlow(skg.ExportPublic, skg.FlowParams{skg.BIP44Path: "m/44'/60'/0'/0/1"})
2021-10-27 08:46:00 +03:00
testFlow(skg.Sign, skg.FlowParams{skg.TXHash: "60a78c98d5dd659f714eb7072bfb2c0d8a65f74a8f6aff7bb27cf56ae1feec17", skg.BIP44Path: "m/44'/60'/0'/0/0"})
2021-10-20 12:01:38 +03:00
testFlow(skg.UnpairThis, skg.FlowParams{skg.PIN: correctPIN})
2021-10-19 12:19:02 +03:00
}