Annotation of embedaddon/php/ext/hash/hash_joaat.c, revision 1.1.1.2

1.1       misho       1: /*
                      2:   +----------------------------------------------------------------------+
                      3:   | PHP Version 5                                                        |
                      4:   +----------------------------------------------------------------------+
1.1.1.2 ! misho       5:   | Copyright (c) 1997-2013 The PHP Group                                |
1.1       misho       6:   +----------------------------------------------------------------------+
                      7:   | This source file is subject to version 3.01 of the PHP license,      |
                      8:   | that is bundled with this package in the file LICENSE, and is        |
                      9:   | available through the world-wide-web at the following url:           |
                     10:   | http://www.php.net/license/3_01.txt                                  |
                     11:   | If you did not receive a copy of the PHP license and are unable to   |
                     12:   | obtain it through the world-wide-web, please send a note to          |
                     13:   | license@php.net so we can mail you a copy immediately.               |
                     14:   +----------------------------------------------------------------------+
                     15:   | Author: Martin Jansen <mj@php.net>                                   |
                     16:   +----------------------------------------------------------------------+
                     17: */
                     18: 
                     19: /* $Id$ */
                     20: 
                     21: /* Implements Jenkins's one-at-a-time hashing algorithm as presented on
                     22:  * http://www.burtleburtle.net/bob/hash/doobs.html.
                     23:  */
                     24: 
                     25: #include "php_hash.h"
                     26: #include "php_hash_joaat.h"
                     27: 
                     28: const php_hash_ops php_hash_joaat_ops = {
                     29:        (php_hash_init_func_t) PHP_JOAATInit,
                     30:        (php_hash_update_func_t) PHP_JOAATUpdate,
                     31:        (php_hash_final_func_t) PHP_JOAATFinal,
                     32:        (php_hash_copy_func_t) php_hash_copy,
                     33:        4,
                     34:        4,
                     35:        sizeof(PHP_JOAAT_CTX)
                     36: };
                     37: 
                     38: PHP_HASH_API void PHP_JOAATInit(PHP_JOAAT_CTX *context)
                     39: {
                     40:        context->state = 0;
                     41: }
                     42: 
                     43: PHP_HASH_API void PHP_JOAATUpdate(PHP_JOAAT_CTX *context, const unsigned char *input, unsigned int inputLen)
                     44: {
                     45:        context->state = joaat_buf((void *)input, inputLen, context->state);
                     46: }
                     47: 
                     48: PHP_HASH_API void PHP_JOAATFinal(unsigned char digest[4], PHP_JOAAT_CTX * context)
                     49: {
                     50: #ifdef WORDS_BIGENDIAN
                     51:        memcpy(digest, &context->state, 4);
                     52: #else
                     53:        int i = 0;
                     54:        unsigned char *c = (unsigned char *) &context->state;
                     55: 
                     56:        for (i = 0; i < 4; i++) {
                     57:                digest[i] = c[3 - i];
                     58:        }
                     59: #endif
                     60:     context->state = 0;
                     61: }
                     62: 
                     63: /*
                     64:  * joaat_buf - perform a Jenkins's one-at-a-time hash on a buffer
                     65:  *
                     66:  * input:
                     67:  *  buf - start of buffer to hash
                     68:  *  len - length of buffer in octets
                     69:  *
                     70:  * returns:
                     71:  *  32 bit hash as a static hash type
                     72:  */
                     73: static php_hash_uint32
                     74: joaat_buf(void *buf, size_t len, php_hash_uint32 hval)
                     75: {
                     76:     size_t i;
                     77:     unsigned char *input = (unsigned char *)buf;
                     78:  
                     79:     for (i = 0; i < len; i++) {
                     80:         hval += input[i];
                     81:         hval += (hval << 10);
                     82:         hval ^= (hval >> 6);
                     83:     }
                     84: 
                     85:     hval += (hval << 3);
                     86:     hval ^= (hval >> 11);
                     87:     hval += (hval << 15);
                     88: 
                     89:     return hval;
                     90: }
                     91: 
                     92: /*
                     93:  * Local variables:
                     94:  * tab-width: 4
                     95:  * c-basic-offset: 4
                     96:  * End:
                     97:  * vim600: noet sw=4 ts=4 fdm=marker
                     98:  * vim<600: noet sw=4 ts=4
                     99:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>