]> granicus.if.org Git - php/commitdiff
fix bug #45028 (CRC32 output endianness is different between crc32() and hash())
authorAntony Dovgal <tony2001@php.net>
Mon, 18 Aug 2008 14:28:57 +0000 (14:28 +0000)
committerAntony Dovgal <tony2001@php.net>
Mon, 18 Aug 2008 14:28:57 +0000 (14:28 +0000)
ext/hash/hash_crc32.c
ext/hash/tests/crc32.phpt
ext/hash/tests/hash_copy_001.phpt

index ccc6de3b0dc409e947266d4034e160d3e8e06bb7..9f03ad07046338317cf8f0f0dfe6dcd1a90ce446 100644 (file)
@@ -56,6 +56,16 @@ PHP_HASH_API void PHP_CRC32Final(unsigned char digest[4], PHP_CRC32_CTX *context
        context->state = 0;
 }
 
+PHP_HASH_API void PHP_CRC32BFinal(unsigned char digest[4], PHP_CRC32_CTX *context)
+{
+       context->state=~context->state;
+       digest[0] = (unsigned char) ((context->state >> 24) & 0xff);
+       digest[1] = (unsigned char) ((context->state >> 16) & 0xff);
+       digest[2] = (unsigned char) ((context->state >> 8) & 0xff);
+       digest[3] = (unsigned char) (context->state & 0xff);
+       context->state = 0;
+}
+
 PHP_HASH_API int PHP_CRC32Copy(const php_hash_ops *ops, PHP_CRC32_CTX *orig_context, PHP_CRC32_CTX *copy_context)
 {
        copy_context->state = orig_context->state;
@@ -75,7 +85,7 @@ const php_hash_ops php_hash_crc32_ops = {
 const php_hash_ops php_hash_crc32b_ops = {
        (php_hash_init_func_t) PHP_CRC32Init,
        (php_hash_update_func_t) PHP_CRC32BUpdate,
-       (php_hash_final_func_t) PHP_CRC32Final,
+       (php_hash_final_func_t) PHP_CRC32BFinal,
        (php_hash_copy_func_t) PHP_CRC32Copy,
        4, /* what to say here? */
        4,
index a6ae3aefdf97a06b165c217e09774b2524fe509c..42bb73c437d34192d83677b9e1ea6f00e05718a1 100644 (file)
@@ -28,9 +28,9 @@ echo hash('crc32b', '12345678901234567890123456789012345678901234567890123456789
 882174a0
 96790816
 00000000
-43beb7e8
-c2412435
-7f9d1520
-bd50274c
-d2e6c21f
-724aa97c
+e8b7be43
+352441c2
+20159d7f
+4c2750bd
+1fc2e6d2
+7ca94a72
index d1a0016dc234a7f3f17704c1fa202c314ecc9f65..6c3d83bc31318ac85deddacdc38d2b11815b3dae 100644 (file)
@@ -75,8 +75,8 @@ unicode(8) "28097c6f"
 unicode(8) "28097c6f"
 unicode(8) "e5cfc160"
 unicode(8) "e5cfc160"
-unicode(8) "4e7a1469"
-unicode(8) "4e7a1469"
+unicode(8) "69147a4e"
+unicode(8) "69147a4e"
 unicode(32) "86362472c8895e68e223ef8b3711d8d9"
 unicode(32) "86362472c8895e68e223ef8b3711d8d9"
 unicode(40) "fabdf6905f3ba18a3c93d6a16b91e31f7222a7a4"
@@ -155,8 +155,8 @@ unicode(8) "28097c6f"
 unicode(8) "471714d9"
 unicode(8) "e5cfc160"
 unicode(8) "59f8d3d2"
-unicode(8) "4e7a1469"
-unicode(8) "9939e63e"
+unicode(8) "69147a4e"
+unicode(8) "3ee63999"
 unicode(32) "86362472c8895e68e223ef8b3711d8d9"
 unicode(32) "ebeeeb05c18af1e53d2d127b561d5e0d"
 unicode(40) "fabdf6905f3ba18a3c93d6a16b91e31f7222a7a4"