explicitly use secure channel and check if open

This commit is contained in:
Andrea Franz 2019-03-11 13:11:41 +01:00
parent db9987efdd
commit d28c52a900
No known key found for this signature in database
GPG Key ID: 4F0D2F2D9DE7F29D
1 changed files with 17 additions and 6 deletions

View File

@ -10,10 +10,13 @@ import (
"github.com/status-im/keycard-go/types"
)
var ErrSecureChannelNotOpen = errors.New("secure channel not open")
type LoadingCallback = func(loadingBlock, totalBlocks int)
type CommandSet struct {
c types.Channel
sc *SecureChannel
session *Session
}
@ -57,6 +60,10 @@ func (cs *CommandSet) OpenSecureChannel() error {
}
func (cs *CommandSet) DeleteKeycardInstancesAndPackage() error {
if cs.sc == nil {
return ErrSecureChannelNotOpen
}
instanceAID, err := identifiers.KeycardInstanceAID(identifiers.KeycardDefaultInstanceIndex)
if err != nil {
return err
@ -70,7 +77,7 @@ func (cs *CommandSet) DeleteKeycardInstancesAndPackage() error {
for _, id := range ids {
cmd := NewCommandDelete(id)
resp, err := cs.c.Send(cmd)
resp, err := cs.sc.Send(cmd)
if cs.checkOK(resp, err, SwOK, SwReferencedDataNotFound) != nil {
return err
}
@ -80,8 +87,12 @@ func (cs *CommandSet) DeleteKeycardInstancesAndPackage() error {
}
func (cs *CommandSet) LoadKeycardPackage(capFile *os.File, callback LoadingCallback) error {
if cs.sc == nil {
return ErrSecureChannelNotOpen
}
preLoad := NewCommandInstallForLoad(identifiers.PackageAID, []byte{})
resp, err := cs.c.Send(preLoad)
resp, err := cs.sc.Send(preLoad)
if err = cs.checkOK(resp, err); err != nil {
return err
}
@ -94,7 +105,7 @@ func (cs *CommandSet) LoadKeycardPackage(capFile *os.File, callback LoadingCallb
for load.Next() {
cmd := load.GetCommand()
callback(int(load.Index()), load.BlocksCount())
resp, err = cs.c.Send(cmd)
resp, err = cs.sc.Send(cmd)
if err = cs.checkOK(resp, err); err != nil {
return err
}
@ -126,7 +137,7 @@ func (cs *CommandSet) InstallKeycardApplet() error {
func (cs *CommandSet) installForInstall(packageAID, appletAID, instanceAID, params []byte) error {
cmd := NewCommandInstallForInstall(packageAID, appletAID, instanceAID, params)
resp, err := cs.c.Send(cmd)
resp, err := cs.sc.Send(cmd)
return cs.checkOK(resp, err)
}
@ -143,7 +154,7 @@ func (cs *CommandSet) initializeUpdate(hostChallenge []byte) error {
if err != nil {
return err
}
cs.c = NewSecureChannel(session, cs.c)
cs.sc = NewSecureChannel(session, cs.c)
cs.session = session
return nil
@ -160,7 +171,7 @@ func (cs *CommandSet) externalAuthenticate() error {
return err
}
resp, err := cs.c.Send(cmd)
resp, err := cs.sc.Send(cmd)
return cs.checkOK(resp, err)
}