Add packet padding container for packet length shaping

This commit is contained in:
Shelikhoo 2025-01-28 14:03:59 +00:00
parent c1ac2aa577
commit 9e1cc35878
No known key found for this signature in database
GPG key ID: 4C9764E9FE80A3DC
3 changed files with 194 additions and 0 deletions

View file

@ -0,0 +1,47 @@
package packetPaddingContainer
import "encoding/binary"
func New() PacketPaddingContainer {
return packetPaddingContainer{}
}
type packetPaddingContainer struct {
}
func (c packetPaddingContainer) Pack(data_OWNERSHIP_RELINQUISHED []byte, padding int) []byte {
data := append(data_OWNERSHIP_RELINQUISHED, make([]byte, padding)...)
data_length := len(data_OWNERSHIP_RELINQUISHED)
data = append(data, byte(data_length>>8), byte(data_length))
return data
}
func (c packetPaddingContainer) Pad(padding int) []byte {
if assertPaddingLengthIsNotNegative := padding < 0; assertPaddingLengthIsNotNegative {
return nil
}
switch padding {
case 0:
return []byte{}
case 1:
return []byte{0}
case 2:
return []byte{0, 0}
default:
return append(make([]byte, padding-2), byte(padding>>8), byte(padding))
}
}
func (c packetPaddingContainer) Unpack(wrappedData_OWNERSHIP_RELINQUISHED []byte) ([]byte, int) {
if len(wrappedData_OWNERSHIP_RELINQUISHED) < 2 {
return nil, len(wrappedData_OWNERSHIP_RELINQUISHED)
}
wrappedData_tail := wrappedData_OWNERSHIP_RELINQUISHED[len(wrappedData_OWNERSHIP_RELINQUISHED)-2:]
dataLength := int(binary.BigEndian.Uint16(wrappedData_tail))
paddingLength := len(wrappedData_OWNERSHIP_RELINQUISHED) - dataLength - 2
if paddingLength < 0 {
return nil, paddingLength
}
return wrappedData_OWNERSHIP_RELINQUISHED[:dataLength], paddingLength
}