[BACK]Return to siphash.h CVS log [TXT][DIR] Up to [local] / src / include

Annotation of src/include/siphash.h, Revision 1.4

1.1       tedu        1: /*-
                      2:  * Copyright (c) 2013 Andre Oppermann <andre@FreeBSD.org>
                      3:  * All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms, with or without
                      6:  * modification, are permitted provided that the following conditions
                      7:  * are met:
                      8:  * 1. Redistributions of source code must retain the above copyright
                      9:  *    notice, this list of conditions and the following disclaimer.
                     10:  * 2. Redistributions in binary form must reproduce the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer in the
                     12:  *    documentation and/or other materials provided with the distribution.
                     13:  * 3. The name of the author may not be used to endorse or promote
                     14:  *    products derived from this software without specific prior written
                     15:  *    permission.
                     16:  *
                     17:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     20:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     21:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     27:  * SUCH DAMAGE.
                     28:  *
1.4     ! jmc        29:  * $OpenBSD: siphash.h,v 1.3 2015/02/20 11:51:03 tedu Exp $
1.1       tedu       30:  */
                     31:
                     32: /*
                     33:  * SipHash is a family of pseudorandom functions (a.k.a. keyed hash functions)
                     34:  * optimized for speed on short messages returning a 64bit hash/digest value.
                     35:  *
                     36:  * The number of rounds is defined during the initialization:
1.4     ! jmc        37:  *  SipHash24_Init() for the fast and reasonable strong version
1.1       tedu       38:  *  SipHash48_Init() for the strong version (half as fast)
                     39:  *
                     40:  * struct SIPHASH_CTX ctx;
                     41:  * SipHash24_Init(&ctx);
                     42:  * SipHash_SetKey(&ctx, "16bytes long key");
                     43:  * SipHash_Update(&ctx, pointer_to_string, length_of_string);
                     44:  * SipHash_Final(output, &ctx);
                     45:  */
                     46:
                     47: #ifndef _SIPHASH_H_
                     48: #define _SIPHASH_H_
                     49:
                     50: #define SIPHASH_BLOCK_LENGTH    8
                     51: #define SIPHASH_KEY_LENGTH     16
                     52: #define SIPHASH_DIGEST_LENGTH   8
                     53:
                     54: typedef struct _SIPHASH_CTX {
1.3       tedu       55:        uint64_t        v[4];
                     56:        uint8_t         buf[SIPHASH_BLOCK_LENGTH];
                     57:        uint32_t        bytes;
1.1       tedu       58: } SIPHASH_CTX;
                     59:
                     60: typedef struct {
1.3       tedu       61:        uint64_t        k0;
                     62:        uint64_t        k1;
1.1       tedu       63: } SIPHASH_KEY;
                     64:
                     65: void           SipHash_Init(SIPHASH_CTX *, const SIPHASH_KEY *);
                     66: void           SipHash_Update(SIPHASH_CTX *, int, int, const void *, size_t);
1.3       tedu       67: uint64_t       SipHash_End(SIPHASH_CTX *, int, int);
1.1       tedu       68: void           SipHash_Final(void *, SIPHASH_CTX *, int, int);
1.3       tedu       69: uint64_t       SipHash(const SIPHASH_KEY *, int, int, const void *, size_t);
1.1       tedu       70:
                     71: #define SipHash24_Init(_c, _k)         SipHash_Init((_c), (_k))
                     72: #define SipHash24_Update(_c, _p, _l)   SipHash_Update((_c), 2, 4, (_p), (_l))
                     73: #define SipHash24_End(_d)              SipHash_End((_d), 2, 4)
                     74: #define SipHash24_Final(_d, _c)                SipHash_Final((_d), (_c), 2, 4)
                     75: #define SipHash24(_k, _p, _l)          SipHash((_k), 2, 4, (_p), (_l))
                     76:
                     77: #define SipHash48_Init(_c, _k)         SipHash_Init((_c), (_k))
                     78: #define SipHash48_Update(_c, _p, _l)   SipHash_Update((_c), 4, 8, (_p), (_l))
                     79: #define SipHash48_End(_d)              SipHash_End((_d), 4, 8)
                     80: #define SipHash48_Final(_d, _c)                SipHash_Final((_d), (_c), 4, 8)
                     81: #define SipHash48(_k, _p, _l)          SipHash((_k), 4, 8, (_p), (_l))
                     82:
                     83: #endif /* _SIPHASH_H_ */