On Sat, Jul 11, 2015 at 10:25 AM, Akira Hayakawa wrote:

Hi,

I am at loss how I can compute crc32c hash value with given seed.

Some C libraries including Linux kernel's libcrc32c has API that takes

three arguments: seed(uint32), data(void *) and the length(int). So the

same design in Go's crc32 library helps users import their C programs to

Go. Actually, I need the API.

I tried crc32.Update(seed, Castagnoli table, data) but the computed value

differs from what I compute with Linux's libcrc32c.

I am not expertise in crc32c algorithm but I am just a user. So I think I

should ask you how to make the same thing as libcrc32c using Go's crc32

library.

crc32c uses polynomial 0x1EDC6F1 (reversed 0x82F63B78). So from

src/hash/example_test.go (replace 0xD5828281 with 0x82F63B78):

package crc32_test

import (

"fmt"

"hash/crc32"

)

func ExampleMakeTable() {

// In this package, the CRC polynomial is represented in reversed

notation,

// or LSB-first representation.

//

// LSB-first representation is a hexadecimal number with n bits, in

which the

// most significant bit represents the coefficient of x⁰ and the least

significant

// bit represents the coefficient of xⁿ⁻¹ (the coefficient for xⁿ is

implicit).

//

// For example, CRC32-Q, as defined by the following polynomial,

// x³²+ x³¹+ x²⁴+ x²²+ x¹⁶+ x¹⁴+ x⁸+ x⁷+ x⁵+ x³+ x¹+ x⁰

// has the reversed notation 0b11010101100000101000001010000001, so the

value

// that should be passed to MakeTable is 0xD5828281.

crc32q := crc32.MakeTable(0xD5828281)

fmt.Printf("%08x\n", crc32.Checksum([]byte("Hello world"), crc32q))

// Output:

// 2964d064

}

See more test examples in src/hash/crc32_test.go

*Note, 0x82F63B78 is exported from src/hash/crc32.go as a constant via

crc32.Castagnoli

--

You received this message because you are subscribed to the Google Groups "golang-nuts" group.

To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscribe@googlegroups.com.

For more options, visit

https://groups.google.com/d/optout.