1138568Ssam/* $OpenBSD: crc32.c,v 1.11 2006/04/22 18:29:33 stevesk Exp $ */ 2138568Ssam 3178354Ssam/* 4138568Ssam * Copyright (c) 2003 Markus Friedl. All rights reserved. 5138568Ssam * 6138568Ssam * Redistribution and use in source and binary forms, with or without 7138568Ssam * modification, are permitted provided that the following conditions 8138568Ssam * are met: 9138568Ssam * 1. Redistributions of source code must retain the above copyright 10138568Ssam * notice, this list of conditions and the following disclaimer. 11138568Ssam * 2. Redistributions in binary form must reproduce the above copyright 12138568Ssam * notice, this list of conditions and the following disclaimer in the 13138568Ssam * documentation and/or other materials provided with the distribution. 14138568Ssam * 15138568Ssam * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16138568Ssam * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17138568Ssam * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18138568Ssam * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19138568Ssam * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20138568Ssam * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21138568Ssam * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22138568Ssam * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23138568Ssam * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24138568Ssam * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25138568Ssam */ 26138568Ssam#include "includes.h" 27138568Ssam#include "crc32.h" 28138568Ssam 29138568Ssamstatic const u_int32_t crc32tab[] = { 30138568Ssam 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 31138568Ssam 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 32138568Ssam 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 33138568Ssam 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, 34138568Ssam 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 35138568Ssam 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 36138568Ssam 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 37138568Ssam 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 38138568Ssam 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 39138568Ssam 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, 40138568Ssam 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 41138568Ssam 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 42178354Ssam 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 43178354Ssam 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, 44138568Ssam 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 45138568Ssam 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 46138568Ssam 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 47138568Ssam 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, 48138568Ssam 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 49138568Ssam 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, 50138568Ssam 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 51138568Ssam 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 52138568Ssam 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 53138568Ssam 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, 54138568Ssam 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 55138568Ssam 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 56138568Ssam 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 57138568Ssam 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L, 58138568Ssam 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 59178354Ssam 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, 60178354Ssam 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 61178354Ssam 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 62138568Ssam 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 63138568Ssam 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L, 64138568Ssam 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 65138568Ssam 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 66138568Ssam 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 67138568Ssam 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, 68138568Ssam 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 69138568Ssam 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, 70138568Ssam 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 71138568Ssam 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 72138568Ssam 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 73138568Ssam 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, 74178354Ssam 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 75178354Ssam 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 76178354Ssam 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 77 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, 78 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 79 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, 80 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 81 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 82 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 83 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, 84 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 85 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 86 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 87 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL, 88 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 89 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, 90 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 91 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 92 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 93 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL 94}; 95 96u_int32_t 97ssh_crc32(const u_char *buf, u_int32_t size) 98{ 99 u_int32_t i, crc; 100 101 crc = 0; 102 for (i = 0; i < size; i++) 103 crc = crc32tab[(crc ^ buf[i]) & 0xff] ^ (crc >> 8); 104 return crc; 105} 106