Initial cloud-services repo - gateway service + pkg modules

This commit is contained in:
Chris Rai
2026-01-30 23:14:52 -05:00
commit fbb820d7b3
1037 changed files with 171318 additions and 0 deletions

68
pkg/utils/vod/crc.go Normal file
View File

@@ -0,0 +1,68 @@
package vod
import (
"encoding/binary"
"github.com/sigurn/crc8"
)
func NewVODHelper(lengthInCRC bool,
crcInLength bool,
lengthInLength bool) VODHelper {
return VODHelper{
table: crc8.MakeTable(crc8.Params{
Poly: 0x1D,
Init: 0,
RefIn: false,
RefOut: false,
XorOut: 0,
Check: 0,
Name: "CEC-8 VOD",
}),
lengthInCRC: lengthInCRC,
crcInLength: crcInLength,
lengthInLength: lengthInLength,
}
}
type VODHelper struct {
table *crc8.Table
lengthInCRC bool
crcInLength bool
lengthInLength bool
}
// Given a list of bytes, we calculate our custom CRC-8 on it, then prepend the length and postpend the crc in place of last byte
// So 0x01 0x02 0x00 -> 0x00 0x05 0x01 0x02 0x00 0xCRC-8(0x01 0x02 0x00)
// If you have an existing VOD that you are modifying, this function expects you to have removed the length and the crc
func (v *VODHelper) AddLengthAndCRC(data []byte) []byte {
// first 2 bytes are length including length bytes
length := make([]byte, 2)
lengthPlus := 0
if v.crcInLength { // No
lengthPlus += 1
}
if v.lengthInLength { // Yes
lengthPlus += 2
}
binary.BigEndian.PutUint16(length, uint16(len(data)+lengthPlus))
var crc byte
if v.lengthInCRC { // no
data = append(length, data...)
// calculate crc on data only
crc = v.GenerateCRC(data)
} else { // yes
// calculate crc on data only
crc = v.GenerateCRC(data)
data = append(length, data...)
}
data = append(data, crc)
return data
}
func (v *VODHelper) GenerateCRC(data []byte) byte {
crc := crc8.Checksum(data, v.table)
return crc
}