mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
06c797f517
Signed-off-by: Cory Snider <csnider@mirantis.com>
43 lines
1 KiB
Go
43 lines
1 KiB
Go
// Copyright 2009 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package crc provides utility function for cyclic redundancy check
|
|
// algorithms.
|
|
package crc
|
|
|
|
import (
|
|
"hash"
|
|
"hash/crc32"
|
|
)
|
|
|
|
// The size of a CRC-32 checksum in bytes.
|
|
const Size = 4
|
|
|
|
type digest struct {
|
|
crc uint32
|
|
tab *crc32.Table
|
|
}
|
|
|
|
// New creates a new hash.Hash32 computing the CRC-32 checksum
|
|
// using the polynomial represented by the Table.
|
|
// Modified by xiangli to take a prevcrc.
|
|
func New(prev uint32, tab *crc32.Table) hash.Hash32 { return &digest{prev, tab} }
|
|
|
|
func (d *digest) Size() int { return Size }
|
|
|
|
func (d *digest) BlockSize() int { return 1 }
|
|
|
|
func (d *digest) Reset() { d.crc = 0 }
|
|
|
|
func (d *digest) Write(p []byte) (n int, err error) {
|
|
d.crc = crc32.Update(d.crc, d.tab, p)
|
|
return len(p), nil
|
|
}
|
|
|
|
func (d *digest) Sum32() uint32 { return d.crc }
|
|
|
|
func (d *digest) Sum(in []byte) []byte {
|
|
s := d.Sum32()
|
|
return append(in, byte(s>>24), byte(s>>16), byte(s>>8), byte(s))
|
|
}
|