mirror of
https://github.com/nadoo/glider.git
synced 2025-02-24 09:45:40 +08:00
32 lines
658 B
Go
32 lines
658 B
Go
package ssr
|
|
|
|
import "encoding/binary"
|
|
|
|
func calcShortAdler32(input []byte, a, b uint32) (uint32, uint32) {
|
|
for _, i := range input {
|
|
a += uint32(i)
|
|
b += a
|
|
}
|
|
a %= 65521
|
|
b %= 65521
|
|
return a, b
|
|
}
|
|
|
|
func CalcAdler32(input []byte) uint32 {
|
|
var a uint32 = 1
|
|
var b uint32 = 0
|
|
const nMax = 5552
|
|
for length := len(input); length > nMax; length -= nMax {
|
|
a, b = calcShortAdler32(input[:nMax], a, b)
|
|
input = input[nMax:]
|
|
}
|
|
a, b = calcShortAdler32(input, a, b)
|
|
return (b << 16) + a
|
|
}
|
|
|
|
func CheckAdler32(input []byte, l int) bool {
|
|
adler32 := CalcAdler32(input[:l-4])
|
|
checksum := binary.LittleEndian.Uint32(input[l-4:])
|
|
return adler32 == checksum
|
|
}
|