fix set pinless path command
This commit is contained in:
parent
9d5e996d49
commit
6a75e43732
|
@ -237,7 +237,7 @@ func (cs *CommandSet) DeriveKey(path string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *CommandSet) SetPinlessPath(path string) error {
|
func (cs *CommandSet) SetPinlessPath(path string) error {
|
||||||
cmd, err := NewCommandDeriveKey(path)
|
cmd, err := NewCommandSetPinlessPath(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -247,7 +247,21 @@ func (cs *CommandSet) SetPinlessPath(path string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *CommandSet) Sign(data []byte) (*types.Signature, error) {
|
func (cs *CommandSet) Sign(data []byte) (*types.Signature, error) {
|
||||||
cmd, err := NewCommandSign(data)
|
cmd, err := NewCommandSign(data, P1SignCurrentKey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := cs.sc.Send(cmd)
|
||||||
|
if err = cs.checkOK(resp, err); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return types.ParseSignature(data, resp.Data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cs *CommandSet) SignPinless(data []byte) (*types.Signature, error) {
|
||||||
|
cmd, err := NewCommandSign(data, P1SignPinless)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
30
commands.go
30
commands.go
|
@ -25,16 +25,20 @@ const (
|
||||||
InsSign = 0xC0
|
InsSign = 0xC0
|
||||||
InsSetPinlessPath = 0xC1
|
InsSetPinlessPath = 0xC1
|
||||||
|
|
||||||
P1PairingFirstStep = 0x00
|
P1PairingFirstStep = 0x00
|
||||||
P1PairingFinalStep = 0x01
|
P1PairingFinalStep = 0x01
|
||||||
P1GetStatusApplication = 0x00
|
P1GetStatusApplication = 0x00
|
||||||
P1GetStatusKeyPath = 0x01
|
P1GetStatusKeyPath = 0x01
|
||||||
P1DeriveKeyFromMaster = 0x00
|
P1DeriveKeyFromMaster = 0x00
|
||||||
P1DeriveKeyFromParent = 0x01
|
P1DeriveKeyFromParent = 0x01
|
||||||
P1DeriveKeyFromCurrent = 0x10
|
P1DeriveKeyFromCurrent = 0x10
|
||||||
P1ChangePinPIN = 0x00
|
P1ChangePinPIN = 0x00
|
||||||
P1ChangePinPUK = 0x01
|
P1ChangePinPUK = 0x01
|
||||||
P1ChangePinPairingSecret = 0x02
|
P1ChangePinPairingSecret = 0x02
|
||||||
|
P1SignCurrentKey = 0x00
|
||||||
|
P1SignDerive = 0x01
|
||||||
|
P1SignDeriveAndMakeCurrent = 0x02
|
||||||
|
P1SignPinless = 0x03
|
||||||
|
|
||||||
SwNoAvailablePairingSlots = 0x6A84
|
SwNoAvailablePairingSlots = 0x6A84
|
||||||
)
|
)
|
||||||
|
@ -209,7 +213,7 @@ func NewCommandSetPinlessPath(pathStr string) (*apdu.Command, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if startingPoint != derivationpath.StartingPointMaster {
|
if len(path) > 0 && startingPoint != derivationpath.StartingPointMaster {
|
||||||
return nil, fmt.Errorf("pinless path must be set with an absolute path")
|
return nil, fmt.Errorf("pinless path must be set with an absolute path")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +233,7 @@ func NewCommandSetPinlessPath(pathStr string) (*apdu.Command, error) {
|
||||||
), nil
|
), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCommandSign(data []byte) (*apdu.Command, error) {
|
func NewCommandSign(data []byte, p1 uint8) (*apdu.Command, error) {
|
||||||
if len(data) != 32 {
|
if len(data) != 32 {
|
||||||
return nil, fmt.Errorf("data length must be 32, got %d", len(data))
|
return nil, fmt.Errorf("data length must be 32, got %d", len(data))
|
||||||
}
|
}
|
||||||
|
@ -237,7 +241,7 @@ func NewCommandSign(data []byte) (*apdu.Command, error) {
|
||||||
return apdu.NewCommand(
|
return apdu.NewCommand(
|
||||||
globalplatform.ClaGp,
|
globalplatform.ClaGp,
|
||||||
InsSign,
|
InsSign,
|
||||||
0,
|
p1,
|
||||||
0,
|
0,
|
||||||
data,
|
data,
|
||||||
), nil
|
), nil
|
||||||
|
|
Loading…
Reference in New Issue