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

1.1     ! misho       1: /*
        !             2:   +----------------------------------------------------------------------+
        !             3:   | PHP Version 5                                                        |
        !             4:   +----------------------------------------------------------------------+
        !             5:   | Copyright (c) 1997-2012 The PHP Group                                |
        !             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>