89 lines
2.2 KiB
Go
89 lines
2.2 KiB
Go
package sdf
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"fmt"
|
|
|
|
"xdx.jelly/xgcl/api/common"
|
|
)
|
|
|
|
type DeviceInfo struct {
|
|
IssuerName [40]byte
|
|
DeviceName [16]byte
|
|
DeviceSerial [16]byte
|
|
DeviceVersion uint32
|
|
StandardVersion uint32
|
|
AsymAlgAbility [2]uint32
|
|
SymAlgAbility uint32
|
|
HashAlgAbility uint32
|
|
BufferSize uint32
|
|
}
|
|
|
|
func (d *DeviceInfo) Size() int {
|
|
return 40 + 16 + 16 + 4*7
|
|
}
|
|
|
|
func strlen(s []byte) int {
|
|
for i, c := range s {
|
|
if c == 0 {
|
|
return i
|
|
}
|
|
}
|
|
return len(s)
|
|
}
|
|
|
|
func (d *DeviceInfo) String() string {
|
|
return fmt.Sprintf("IssuerName: %s\nDeviceName: %s\nDeviceSerial: %s\nDeviceVersion: 0x%08x\nStandardVersion: 0x%08x\nAsymAlgAbility: 0x%08x%08x\nSymAlgAbility 0x%08x\nHashAlgAbility 0x%08x\nBufferSize: 0x%08x",
|
|
string(d.IssuerName[:strlen(d.IssuerName[:])]),
|
|
string(d.DeviceName[:strlen(d.DeviceName[:])]),
|
|
string(d.DeviceSerial[:strlen(d.DeviceSerial[:])]),
|
|
d.DeviceVersion,
|
|
d.StandardVersion,
|
|
d.AsymAlgAbility[0],
|
|
d.AsymAlgAbility[1],
|
|
d.SymAlgAbility,
|
|
d.HashAlgAbility,
|
|
d.BufferSize)
|
|
}
|
|
|
|
func (d *DeviceInfo) Unmarshal(data []byte) error {
|
|
fmt.Println(data)
|
|
if len(data) < d.Size() {
|
|
return common.SDR_INARGERR
|
|
}
|
|
n := copy(d.IssuerName[:], data)
|
|
data = data[n:]
|
|
n = copy(d.DeviceName[:], data)
|
|
data = data[n:]
|
|
n = copy(d.DeviceSerial[:], data)
|
|
data = data[n:]
|
|
d.DeviceVersion = binary.LittleEndian.Uint32(data)
|
|
data = data[4:]
|
|
d.StandardVersion = binary.LittleEndian.Uint32(data)
|
|
data = data[4:]
|
|
d.AsymAlgAbility[0] = binary.LittleEndian.Uint32(data)
|
|
data = data[4:]
|
|
d.AsymAlgAbility[1] = binary.LittleEndian.Uint32(data)
|
|
data = data[4:]
|
|
d.SymAlgAbility = binary.LittleEndian.Uint32(data)
|
|
data = data[4:]
|
|
d.HashAlgAbility = binary.LittleEndian.Uint32(data)
|
|
data = data[4:]
|
|
d.BufferSize = binary.LittleEndian.Uint32(data)
|
|
return nil
|
|
}
|
|
|
|
var (
|
|
devInfo = &DeviceInfo{
|
|
IssuerName: [40]byte{'G', 'o', 'M', 'a', 'i', 'n'},
|
|
DeviceName: [16]byte{'G', 'C', 'L'},
|
|
DeviceSerial: [16]byte{'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'},
|
|
DeviceVersion: 1,
|
|
StandardVersion: 1,
|
|
AsymAlgAbility: [2]uint32{10000, 10000},
|
|
SymAlgAbility: 10000,
|
|
HashAlgAbility: 10000,
|
|
BufferSize: 1024, // 最大随机数长度
|
|
}
|
|
)
|