Beispiel #1
0
func main() {
	var nBytes uint64
	var s uint32
	in := os.Stdin

	for {
		buffer := make([]byte, 10000)
		count, err := in.Read(buffer)
		if err == io.EOF {
			break
		}
		if err != nil {
			fmt.Fprintf(os.Stderr, "%s\n", err)
			return
		}
		nBytes += uint64(count)

		s = sumBuffer(s, buffer[:count])

	}

	// fmt.Println("raw", s)

	if nBytes == 0 {
		s = cksum.Accumulate(s, 0)
	}
	for a := nBytes; a != 0; {
		var x byte = byte(a & 0xff)
		s = cksum.Accumulate(s, x)
		a >>= 8
	}
	//	for i := 0; i < 4; i += 1 {
	//		s = sum(P, s, 0)
	//	}
	fmt.Println(^s, nBytes)
}
Beispiel #2
0
func sumBuffer(s uint32, buffer []byte) uint32 {
	for i := 0; i < len(buffer); i += 1 {
		s = cksum.Accumulate(s, buffer[i])
	}
	return s
}