moved bin 8 out and removed clientctx

moved crypto bin8 out of entrance server

removed unused clientctx

missed import

fix accidental commit and rename ack_helpers
This commit is contained in:
stratic-dev
2024-10-09 09:15:29 +01:00
parent 701d88166f
commit 62fe5cf277
447 changed files with 949 additions and 1385 deletions

View File

@@ -0,0 +1,51 @@
package bin8
import (
"encoding/binary"
)
var (
_bin8Key = []byte{0x01, 0x23, 0x34, 0x45, 0x56, 0xAB, 0xCD, 0xEF}
_sum32Table0 = []byte{0x35, 0x7A, 0xAA, 0x97, 0x53, 0x66, 0x12}
_sum32Table1 = []byte{0x7A, 0xAA, 0x97, 0x53, 0x66, 0x12, 0xDE, 0xDE, 0x35}
)
// CalcSum32 calculates the custom MHF "sum32" checksum of the given data.
func CalcSum32(data []byte) uint32 {
tableIdx0 := (len(data) + 1) & 0xFF
tableIdx1 := int((data[len(data)>>1] + 1) & 0xFF)
out := make([]byte, 4)
for i := 0; i < len(data); i++ {
key := data[i] ^ _sum32Table0[(tableIdx0+i)%7] ^ _sum32Table1[(tableIdx1+i)%9]
out[i&3] = (out[i&3] + key) & 0xFF
}
return binary.BigEndian.Uint32(out)
}
func rotate(k *uint32) {
*k = uint32(((54323 * uint(*k)) + 1) & 0xFFFFFFFF)
}
// EncryptBin8 encrypts the given data using MHF's "binary8" encryption.
func EncryptBin8(data []byte, key byte) []byte {
_key := uint32(key)
var output []byte
for i := 0; i < len(data); i++ {
rotate(&_key)
tmp := _bin8Key[i&7] ^ byte((_key>>13)&0xFF)
output = append(output, data[i]^tmp)
}
return output
}
// DecryptBin8 decrypts the given MHF "binary8" data.
func DecryptBin8(data []byte, key byte) []byte {
_key := uint32(key)
var output []byte
for i := 0; i < len(data); i++ {
rotate(&_key)
tmp := data[i] ^ byte((_key>>13)&0xFF)
output = append(output, tmp^_bin8Key[i&7])
}
return output
}

View File

@@ -0,0 +1,73 @@
package bin8
import (
"bytes"
"encoding/hex"
"fmt"
"testing"
)
var tests = []struct {
data []byte
sum uint32
encryptedData []byte
encryptionKey byte
}{
{
[]byte{0x4C, 0x6F, 0x72, 0x65, 0x6D, 0x20},
0xAE6CA2C,
[]byte{0x7E, 0x4C, 0x1D, 0x16, 0x9D, 0x46},
0x55,
},
{
[]byte{0x69, 0x70, 0x73, 0x75, 0x6D, 0x20, 0x64, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x73, 0x69, 0x74, 0x20, 0x61, 0x6D, 0x65, 0x74, 0x2C, 0x20},
0xCE5F1E96,
[]byte{0x41, 0x65, 0xFF, 0x74, 0x64, 0x45, 0xB8, 0xB1, 0x18, 0xB0, 0x94, 0xA3, 0xF8, 0xD, 0xBF, 0x3C, 0xC8, 0x24, 0xE2, 0xEC, 0x3B, 0xCE},
0x7A,
},
{
[]byte{0x63, 0x6F, 0x6E, 0x73, 0x65, 0x63, 0x74, 0x65, 0x74, 0x75, 0x72, 0x20, 0x61, 0x64, 0x69, 0x70, 0x69, 0x73, 0x63, 0x69, 0x6E, 0x67, 0x20, 0x65, 0x6C, 0x69, 0x74, 0x2C, 0x20},
0xF3EECEBB,
[]byte{0xE, 0xBB, 0x19, 0xA5, 0xB9, 0x34, 0xFE, 0x51, 0x0, 0x61, 0x2D, 0x38, 0xB2, 0x98, 0xC2, 0xE0, 0x17, 0xDE, 0x6E, 0xE3, 0x6C, 0x1E, 0x19, 0xB6, 0x8C, 0x57, 0x32, 0x32, 0xD8},
0xF8,
},
}
func TestSum32(t *testing.T) {
for k, test := range tests {
testname := fmt.Sprintf("sum32_test_%d", k)
t.Run(testname, func(t *testing.T) {
gotSum := CalcSum32(test.data)
if gotSum != test.sum {
t.Errorf("got sum32 0x%X, want 0x%X", gotSum, test.sum)
}
})
}
}
func TestEncryptBin8(t *testing.T) {
for k, test := range tests {
testname := fmt.Sprintf("encrypt_bin8_test_%d", k)
t.Run(testname, func(t *testing.T) {
gotEncData := EncryptBin8(test.data, test.encryptionKey)
if !bytes.Equal(gotEncData, test.encryptedData) {
t.Errorf("got\n\t%s\nwant\n\t%s", hex.Dump(gotEncData), hex.Dump(test.encryptedData))
}
})
}
}
func TestDecryptBin8(t *testing.T) {
for k, test := range tests {
testname := fmt.Sprintf("decrypt_bin8_test_%d", k)
t.Run(testname, func(t *testing.T) {
gotDecData := DecryptBin8(test.encryptedData, test.encryptionKey)
if !bytes.Equal(gotDecData, test.data) {
t.Errorf("got\n\t%s\nwant\n\t%s", hex.Dump(gotDecData), hex.Dump(test.data))
}
})
}
}