42d1e6e991
Add a main loop, move I/O code into io.go, move configuration into config.go. Use shared.Decode24BitLength instead of manually decoding block lengths. Fix response block decoding and checksum validation. Add constants for commonly used byte values and use these in the signer and the client.
37 lines
752 B
Go
37 lines
752 B
Go
package datastructures
|
|
|
|
import "encoding/binary"
|
|
|
|
type Action uint8
|
|
|
|
const ActionNul = Action(0)
|
|
|
|
func (a Action) String() string {
|
|
switch a {
|
|
case ActionNul:
|
|
return "NUL"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
func encode24BitLength(data []byte) []byte {
|
|
lengthBytes := make([]byte, 4)
|
|
binary.BigEndian.PutUint32(lengthBytes, uint32(len(data)))
|
|
return lengthBytes[1:]
|
|
}
|
|
|
|
// calculate length from 24 bits of data in network byte order
|
|
func Decode24BitLength(bytes []byte) int {
|
|
return int(binary.BigEndian.Uint32([]byte{0x0, bytes[0], bytes[1], bytes[2]}))
|
|
}
|
|
|
|
func CalculateXorCheckSum(byteBlocks [][]byte) byte {
|
|
var result byte = 0x0
|
|
for _, byteBlock := range byteBlocks {
|
|
for _, b := range byteBlock {
|
|
result ^= b
|
|
}
|
|
}
|
|
return result
|
|
}
|