mirror of
https://github.com/status-im/keycard-go.git
synced 2025-02-28 11:30:29 +00:00
add hexutils pkg
This commit is contained in:
parent
3f962927cf
commit
fa35b117ff
@ -1,45 +1,23 @@
|
|||||||
package apdu
|
package apdu
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"regexp"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/status-im/status-go/smartcard/hexutils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func hexToBytes(s string) []byte {
|
|
||||||
s = regexp.MustCompile(" ").ReplaceAllString(s, "")
|
|
||||||
b := make([]byte, hex.DecodedLen(len(s)))
|
|
||||||
_, err := hex.Decode(b, []byte(s))
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return b[:]
|
|
||||||
}
|
|
||||||
|
|
||||||
func bytesToHexWithSpaces(b []byte) string {
|
|
||||||
return fmt.Sprintf("% X", b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func bytesToHex(b []byte) string {
|
|
||||||
return fmt.Sprintf("%X", b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNewCommand(t *testing.T) {
|
func TestNewCommand(t *testing.T) {
|
||||||
var cla uint8 = 0x80
|
var cla uint8 = 0x80
|
||||||
var ins uint8 = 0x50
|
var ins uint8 = 0x50
|
||||||
var p1 uint8 = 1
|
var p1 uint8 = 1
|
||||||
var p2 uint8 = 2
|
var p2 uint8 = 2
|
||||||
data := hexToBytes("84762336c5187fe8")
|
data := hexutils.HexToBytes("84762336c5187fe8")
|
||||||
|
|
||||||
cmd := NewCommand(cla, ins, p1, p2, data)
|
cmd := NewCommand(cla, ins, p1, p2, data)
|
||||||
expected := "80 50 01 02 08 84 76 23 36 C5 18 7F E8 00"
|
expected := "80 50 01 02 08 84 76 23 36 C5 18 7F E8 00"
|
||||||
|
|
||||||
result, err := cmd.Serialize()
|
result, err := cmd.Serialize()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expected, bytesToHexWithSpaces(result))
|
assert.Equal(t, expected, hexutils.BytesToHexWithSpaces(result))
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,12 @@ package apdu
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/status-im/status-go/smartcard/hexutils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestParseResponse(t *testing.T) {
|
func TestParseResponse(t *testing.T) {
|
||||||
raw := hexToBytes("000002650183039536622002003b5e508f751c0af3016e3fbc23d3a69000")
|
raw := hexutils.HexToBytes("000002650183039536622002003b5e508f751c0af3016e3fbc23d3a69000")
|
||||||
resp, err := ParseResponse(raw)
|
resp, err := ParseResponse(raw)
|
||||||
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
@ -16,17 +17,17 @@ func TestParseResponse(t *testing.T) {
|
|||||||
assert.Equal(t, uint16(0x9000), resp.Sw)
|
assert.Equal(t, uint16(0x9000), resp.Sw)
|
||||||
|
|
||||||
expected := "000002650183039536622002003B5E508F751C0AF3016E3FBC23D3A6"
|
expected := "000002650183039536622002003B5E508F751C0AF3016E3FBC23D3A6"
|
||||||
assert.Equal(t, expected, bytesToHex(resp.Data))
|
assert.Equal(t, expected, hexutils.BytesToHex(resp.Data))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseResponse_BadData(t *testing.T) {
|
func TestParseResponse_BadData(t *testing.T) {
|
||||||
raw := hexToBytes("")
|
raw := hexutils.HexToBytes("")
|
||||||
_, err := ParseResponse(raw)
|
_, err := ParseResponse(raw)
|
||||||
assert.Equal(t, ErrBadRawResponse, err)
|
assert.Equal(t, ErrBadRawResponse, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestResp_IsOK(t *testing.T) {
|
func TestResp_IsOK(t *testing.T) {
|
||||||
raw := hexToBytes("01029000")
|
raw := hexutils.HexToBytes("01029000")
|
||||||
resp, err := ParseResponse(raw)
|
resp, err := ParseResponse(raw)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.True(t, resp.IsOK())
|
assert.True(t, resp.IsOK())
|
||||||
|
@ -3,6 +3,7 @@ package apdu
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/status-im/status-go/smartcard/hexutils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -12,31 +13,31 @@ func TestFindTag(t *testing.T) {
|
|||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
data := hexToBytes("C1 02 BB CC C2 04 C3 02 11 22 C3 02 88 99")
|
data := hexutils.HexToBytes("C1 02 BB CC C2 04 C3 02 11 22 C3 02 88 99")
|
||||||
|
|
||||||
tagData, err = FindTag(data, uint8(0xC1))
|
tagData, err = FindTag(data, uint8(0xC1))
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "BB CC", bytesToHexWithSpaces(tagData))
|
assert.Equal(t, "BB CC", hexutils.BytesToHexWithSpaces(tagData))
|
||||||
|
|
||||||
tagData, err = FindTag(data, uint8(0xC2))
|
tagData, err = FindTag(data, uint8(0xC2))
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "C3 02 11 22", bytesToHexWithSpaces(tagData))
|
assert.Equal(t, "C3 02 11 22", hexutils.BytesToHexWithSpaces(tagData))
|
||||||
|
|
||||||
tagData, err = FindTag(data, uint8(0xC3))
|
tagData, err = FindTag(data, uint8(0xC3))
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "88 99", bytesToHexWithSpaces(tagData))
|
assert.Equal(t, "88 99", hexutils.BytesToHexWithSpaces(tagData))
|
||||||
|
|
||||||
tagData, err = FindTag(data, uint8(0xC2), uint8(0xC3))
|
tagData, err = FindTag(data, uint8(0xC2), uint8(0xC3))
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "11 22", bytesToHexWithSpaces(tagData))
|
assert.Equal(t, "11 22", hexutils.BytesToHexWithSpaces(tagData))
|
||||||
|
|
||||||
// tag not found
|
// tag not found
|
||||||
data = hexToBytes("C1 00")
|
data = hexutils.HexToBytes("C1 00")
|
||||||
_, err = FindTag(data, uint8(0xC2))
|
_, err = FindTag(data, uint8(0xC2))
|
||||||
assert.Equal(t, &ErrTagNotFound{uint8(0xC2)}, err)
|
assert.Equal(t, &ErrTagNotFound{uint8(0xC2)}, err)
|
||||||
|
|
||||||
// sub-tag not found
|
// sub-tag not found
|
||||||
data = hexToBytes("C1 02 C2 00")
|
data = hexutils.HexToBytes("C1 02 C2 00")
|
||||||
_, err = FindTag(data, uint8(0xC1), uint8(0xC3))
|
_, err = FindTag(data, uint8(0xC1), uint8(0xC3))
|
||||||
assert.Equal(t, &ErrTagNotFound{uint8(0xC3)}, err)
|
assert.Equal(t, &ErrTagNotFound{uint8(0xC3)}, err)
|
||||||
}
|
}
|
||||||
|
@ -1,32 +1,12 @@
|
|||||||
package globalplatform
|
package globalplatform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/status-im/status-go/smartcard/hexutils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func hexToBytes(s string) []byte {
|
|
||||||
b := make([]byte, hex.DecodedLen(len(s)))
|
|
||||||
_, err := hex.Decode(b, []byte(s))
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return b[:]
|
|
||||||
}
|
|
||||||
|
|
||||||
func bytesToHexWithSpaces(b []byte) string {
|
|
||||||
return fmt.Sprintf("% X", b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func bytesToHex(b []byte) string {
|
|
||||||
return fmt.Sprintf("%X", b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCommandSelect(t *testing.T) {
|
func TestCommandSelect(t *testing.T) {
|
||||||
aid := []byte{}
|
aid := []byte{}
|
||||||
cmd := NewCommandSelect(aid)
|
cmd := NewCommandSelect(aid)
|
||||||
@ -38,7 +18,7 @@ func TestCommandSelect(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCommandInitializeUpdate(t *testing.T) {
|
func TestCommandInitializeUpdate(t *testing.T) {
|
||||||
challenge := hexToBytes("010203")
|
challenge := hexutils.HexToBytes("010203")
|
||||||
cmd := NewCommandInitializeUpdate(challenge)
|
cmd := NewCommandInitializeUpdate(challenge)
|
||||||
|
|
||||||
assert.Equal(t, uint8(0x80), cmd.Cla)
|
assert.Equal(t, uint8(0x80), cmd.Cla)
|
||||||
|
27
hexutils/hexutils.go
Normal file
27
hexutils/hexutils.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package hexutils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func HexToBytes(s string) []byte {
|
||||||
|
s = regexp.MustCompile(" ").ReplaceAllString(s, "")
|
||||||
|
b := make([]byte, hex.DecodedLen(len(s)))
|
||||||
|
_, err := hex.Decode(b, []byte(s))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return b[:]
|
||||||
|
}
|
||||||
|
|
||||||
|
func BytesToHexWithSpaces(b []byte) string {
|
||||||
|
return fmt.Sprintf("% X", b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BytesToHex(b []byte) string {
|
||||||
|
return fmt.Sprintf("%X", b)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user