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