diff --git a/internal/keycard_context_v2_state.go b/internal/keycard_context_v2_state.go index 973c4c8..de9cb71 100644 --- a/internal/keycard_context_v2_state.go +++ b/internal/keycard_context_v2_state.go @@ -13,7 +13,7 @@ const ( WaitingForReader State = "waiting-for-reader" WaitingForCard State = "waiting-for-card" ConnectingCard State = "connecting-card" - ConnectionError State = "connection-error" // NOTE: Perhaps a good place for retry + ConnectionError State = "connection-error" NotKeycard State = "not-keycard" EmptyKeycard State = "empty-keycard" NoAvailablePairingSlots State = "no-available-pairing-slots" @@ -43,3 +43,7 @@ func (s *Status) Reset(newState State) { s.AppStatus = nil s.Metadata = nil } + +func (s *Status) KeycardSupportsExtendedKeys() bool { + return s.AppInfo != nil && s.AppInfo.versionRaw >= 0x0310 +} diff --git a/internal/types.go b/internal/types.go index f5fbc13..4e87b20 100644 --- a/internal/types.go +++ b/internal/types.go @@ -25,6 +25,7 @@ type ApplicationInfoV2 struct { Installed bool `json:"installed"` Initialized bool `json:"initialized"` InstanceUID utils.HexString `json:"instanceUID"` + versionRaw int `json:"-"` Version string `json:"version"` AvailableSlots int `json:"availableSlots"` // KeyUID is the sha256 of the master public key on the card. diff --git a/internal/utils.go b/internal/utils.go index c46eefb..bcd0fba 100644 --- a/internal/utils.go +++ b/internal/utils.go @@ -79,6 +79,7 @@ func ToAppInfoV2(r *ktypes.ApplicationInfo) *ApplicationInfoV2 { Installed: r.Installed, Initialized: r.Initialized, InstanceUID: r.InstanceUID, + versionRaw: BytesToInt(r.Version), Version: ParseVersion(r.Version), AvailableSlots: BytesToInt(r.AvailableSlots), KeyUID: r.KeyUID,