#45028 [Asn->Csd]: CRC32 output endianness is different between crc32() and hash()

[email protected]
Newsgroups php.bugs
Message-ID <[email protected]>
 ID:               45028
 Updated by:       [email protected]
 Reported By:      jfrusciante at tiscali dot it
-Status:           Assigned
+Status:           Closed
 Bug Type:         *Encryption and hash functions
 Operating System: *
 PHP Version:      5.2.6
 Assigned To:      scottmac
 New Comment:

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.




Previous Comments:
------------------------------------------------------------------------

[2008-08-11 11:07:42] [email protected]

Mike, can you confirm that this patch is correct?
http://dev.daylessday.org/diff/bug45028.diff

------------------------------------------------------------------------

[2008-05-17 16:03:25] jfrusciante at tiscali dot it

Description:
------------
When I use dechex() to convert a crc32(), and when I directly use
hash("crc32b", ...), I do not get the same output. In particular, the
endianness of the hash() output seems inverted.

In other words: the output of crc32() seems to be correct in its
integer representation (I compared it with Python implementation), but
converting it to hexadecimal (with dechex() or with any calculator)
produces a hex string inverted in its endianness respect to the output
of hash('crc32b', ...) with the same input.

Reproduce code:
---------------
printf("dechex(crc32(\"AAAAAAAA\")): ".
dechex(crc32("AAAAAAAA")).
"<br><br>");

printf("hash(\"crc32b\",\"AAAAAAAA\"): "
.hash("crc32b", "AAAAAAAA")
."<br>");

Expected result:
----------------
dechex(crc32("AAAAAAAA")): 79b71c0a
hash("crc32b","AAAAAAAA"): 79b71c0a

(or
dechex(crc32("AAAAAAAA")): 0a1cb779
hash("crc32b","AAAAAAAA"): 0a1cb779
I think the first two are the right ones)

Actual result:
--------------
dechex(crc32("AAAAAAAA")): 79b71c0a
hash("crc32b","AAAAAAAA"): 0a1cb779

Please note that the difference is only in the bytes order.
"0a-1c-b7-79" is like "79-b7-1c-0a" with inverted endianness, while both
lines should output the same values despite different architectures.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=45028&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.