1b901e1f212c11afda05f2628a522d86802f87c52José Fonseca/************************************************************************** 2b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 3b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * Copyright 2008 VMware, Inc. 4b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * All Rights Reserved. 5b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 6b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * copy of this software and associated documentation files (the 8b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * "Software"), to deal in the Software without restriction, including 9b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * permit persons to whom the Software is furnished to do so, subject to 12b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * the following conditions: 13b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 14b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * The above copyright notice and this permission notice (including the 15b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * next paragraph) shall be included in all copies or substantial portions 16b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * of the Software. 17b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 18b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 26b901e1f212c11afda05f2628a522d86802f87c52José Fonseca **************************************************************************/ 27b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 28b901e1f212c11afda05f2628a522d86802f87c52José Fonseca/** 29b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * @file 30b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * Hash functions implementation. 31b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * 32b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * @author Jose Fonseca 33b901e1f212c11afda05f2628a522d86802f87c52José Fonseca */ 34b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 35b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 36b901e1f212c11afda05f2628a522d86802f87c52José Fonseca#include "u_hash.h" 37b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 38b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 39ae7e75d6108e8621878083b35a13edc1aca893dfJosé Fonsecastatic const uint32_t 40b901e1f212c11afda05f2628a522d86802f87c52José Fonsecautil_crc32_table[256] = { 41b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 42b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 43b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 44b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 45b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 46b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 47b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 48b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 49b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 50b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 51b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 52b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 53b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 54b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 55b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 56b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 57b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 58b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 59b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 60b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 61b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 62b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 63b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 64b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 65b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 66b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 67b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 68b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 69b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 70b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 71b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 72b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 73b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 74b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 75b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 76b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 77b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 78b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 79b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 80b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 81b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 82b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 83b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 84b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 85b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 86b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 87b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 88b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 89b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 90b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 91b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 92b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 93b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 94b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 95b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 96b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 97b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 98b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 99b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 100b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 101b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 102b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 103b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 104b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d 105b901e1f212c11afda05f2628a522d86802f87c52José Fonseca}; 106b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 107b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 108b901e1f212c11afda05f2628a522d86802f87c52José Fonseca/** 109b901e1f212c11afda05f2628a522d86802f87c52José Fonseca * @sa http://www.w3.org/TR/PNG/#D-CRCAppendix 110b901e1f212c11afda05f2628a522d86802f87c52José Fonseca */ 111b901e1f212c11afda05f2628a522d86802f87c52José Fonsecauint32_t 112ae7e75d6108e8621878083b35a13edc1aca893dfJosé Fonsecautil_hash_crc32(const void *data, size_t size) 113b901e1f212c11afda05f2628a522d86802f87c52José Fonseca{ 114b901e1f212c11afda05f2628a522d86802f87c52José Fonseca uint8_t *p = (uint8_t *)data; 115b901e1f212c11afda05f2628a522d86802f87c52José Fonseca uint32_t crc = 0xffffffff; 116b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 117b901e1f212c11afda05f2628a522d86802f87c52José Fonseca while (size--) 118b901e1f212c11afda05f2628a522d86802f87c52José Fonseca crc = util_crc32_table[(crc ^ *p++) & 0xff] ^ (crc >> 8); 119b901e1f212c11afda05f2628a522d86802f87c52José Fonseca 120b901e1f212c11afda05f2628a522d86802f87c52José Fonseca return crc; 121b901e1f212c11afda05f2628a522d86802f87c52José Fonseca} 122