1d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat/* 2d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * Copyright (c) 1999 Kungliga Tekniska H�gskolan 3d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * (Royal Institute of Technology, Stockholm, Sweden). 4d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * All rights reserved. 5d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * 6d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * Redistribution and use in source and binary forms, with or without 7d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * modification, are permitted provided that the following conditions 8d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * are met: 9d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * 10d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * 1. Redistributions of source code must retain the above copyright 11d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * notice, this list of conditions and the following disclaimer. 12d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * 13d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * 2. Redistributions in binary form must reproduce the above copyright 14d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * notice, this list of conditions and the following disclaimer in the 15d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * documentation and/or other materials provided with the distribution. 16d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * 17d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * 3. Neither the name of KTH nor the names of its contributors may be 18d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * used to endorse or promote products derived from this software without 19d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * specific prior written permission. 20d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * 21d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY 22d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE 25d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 28d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 30d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 31d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 32d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat 33d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat/* $Heimdal: hash.h,v 1.1 1999/03/22 19:16:25 joda Exp $ 34d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat $NetBSD: hash.h,v 1.1.1.3 2002/09/12 12:41:42 joda Exp $ */ 35d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat 36d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat/* stuff in common between md4, md5, and sha1 */ 37d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat 38d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#ifndef __hash_h__ 39d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#define __hash_h__ 40d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat 41d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#include <stdlib.h> 42d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#include <string.h> 43d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat 44d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#ifndef min 45d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#define min(a,b) (((a)>(b))?(b):(a)) 46d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#endif 47d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat 48d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat/* Vector Crays doesn't have a good 32-bit type, or more precisely, 49d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat int32_t as defined by <bind/bitypes.h> isn't 32 bits, and we don't 50d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat want to depend in being able to redefine this type. To cope with 51d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat this we have to clamp the result in some places to [0,2^32); no 52d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat need to do this on other machines. Did I say this was a mess? 53d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat */ 54d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat 55d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#ifdef _CRAY 56d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#define CRAYFIX(X) ((X) & 0xffffffff) 57d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#else 58d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#define CRAYFIX(X) (X) 59d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#endif 60d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat 61d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehatstatic inline u_int32_t 62d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehatcshift (u_int32_t x, unsigned int n) 63d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat{ 64d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat x = CRAYFIX(x); 65d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat return CRAYFIX((x << n) | (x >> (32 - n))); 66d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat} 67d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat 68d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat#endif /* __hash_h__ */ 69