mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-15 00:15:08 +01:00
Fix sum32 checksum
This commit is contained in:
@@ -6,23 +6,22 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
_bin8Key = []byte{0x01, 0x23, 0x34, 0x45, 0x56, 0xAB, 0xCD, 0xEF}
|
_bin8Key = []byte{0x01, 0x23, 0x34, 0x45, 0x56, 0xAB, 0xCD, 0xEF}
|
||||||
_sum32Table0 = []byte{0x7A, 0xAA, 0x97, 0x53, 0x66, 0x12, 0xDE, 0xDE, 0x35}
|
_sum32Table0 = []byte{0x35, 0x7A, 0xAA, 0x97, 0x53, 0x66, 0x12}
|
||||||
_sum32Table1 = []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.
|
// CalcSum32 calculates the custom MHF "sum32" checksum of the given data.
|
||||||
func CalcSum32(data []byte) uint32 {
|
func CalcSum32(data []byte) uint32 {
|
||||||
tableIdx0 := byte(len(data) & 0xFF)
|
tableIdx0 := int(len(data) & 0xFF)
|
||||||
tableIdx1 := byte(data[len(data)>>1])
|
tableIdx1 := int(data[len(data)>>1] & 0xFF)
|
||||||
|
|
||||||
out := make([]byte, 4)
|
out := make([]byte, 4)
|
||||||
for i := 0; i < len(data); i++ {
|
for i := 0; i < len(data); i++ {
|
||||||
tableIdx0++
|
tableIdx0++
|
||||||
tableIdx1++
|
tableIdx1++
|
||||||
|
|
||||||
tmp := byte((_sum32Table0[tableIdx1%9] ^ _sum32Table1[tableIdx0%7]) ^ data[i])
|
tmp := byte((_sum32Table1[tableIdx1%9] ^ _sum32Table0[tableIdx0%7]) ^ data[i])
|
||||||
out[i&3] = (out[i&3] + tmp) & 0xFF
|
out[i&3] = (out[i&3] + tmp) & 0xFF
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return binary.BigEndian.Uint32(out)
|
return binary.BigEndian.Uint32(out)
|
||||||
|
|||||||
Reference in New Issue
Block a user