⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tea_hash.c

📁 reiser4progs ReiserFS V4 ReiserFs官方已经关闭 这个是1.0.6 2006-02-22发布的 给需要的朋友
💻 C
字号:
/* Copyright (C) 2001-2005 by Hans Reiser, licensing governed by   reiser4progs/COPYING.      tea_hash.c -- tea hash implementation. */#ifdef ENABLE_TEA_HASH#include <reiser4/plugin.h>#define FULLROUNDS  10#define PARTROUNDS  6#define DELTA	    0x9E3779B9#define tea_hash_core(rounds)					               \do {								               \        uint64_t sum = 0;						       \        int n = rounds;						               \        uint64_t b0, b1;						       \								               \        b0 = h0;							       \        b1 = h1;							       \								               \        do {							               \	        sum += DELTA;						       \	        b0 += ((b1 << 4) + a) ^ (b1 + sum) ^ ((b1 >> 5) + b);          \	        b1 += ((b0 << 4) + c) ^ (b0 + sum) ^ ((b0 >> 5) + d);          \        } while (--n);						               \								               \        h0 += b0;							       \        h1 += b1;							       \} while(0)uint64_t tea_hash_build(unsigned char *name, uint32_t len) {	uint64_t k[] = { 0x9464a485, 0x542e1a94, 0x3e846bff, 0xb75bcfc3}; 	uint64_t i;	uint64_t pad;	uint64_t a, b, c, d;	uint64_t h0 = k[0], h1 = k[1]; 	pad = (uint64_t)len | ((uint64_t)len << 8);	pad |= pad << 16;	while(len >= 16) {		a = (uint64_t)name[0]      |			(uint64_t)name[1] << 8 |			(uint64_t)name[2] << 16|			(uint64_t)name[3] << 24;			b = (uint64_t)name[4]      |			(uint64_t)name[5] << 8 |			(uint64_t)name[6] << 16|			(uint64_t)name[7] << 24;			c = (uint64_t)name[8]       |			(uint64_t)name[9] << 8  |			(uint64_t)name[10] << 16|			(uint64_t)name[11] << 24;			d = (uint64_t)name[12]      |			(uint64_t)name[13] << 8 |			(uint64_t)name[14] << 16|			(uint64_t)name[15] << 24;			tea_hash_core(PARTROUNDS);	    		len -= 16;		name += 16;	}	if (len >= 12) {		if (len >= 16)			*(int *)0 = 0;		a = (uint64_t)name[ 0]      |			(uint64_t)name[ 1] << 8 |			(uint64_t)name[ 2] << 16|			(uint64_t)name[ 3] << 24;	    		b = (uint64_t)name[ 4]      |			(uint64_t)name[ 5] << 8 |			(uint64_t)name[ 6] << 16|			(uint64_t)name[ 7] << 24;	    		c = (uint64_t)name[ 8]      |			(uint64_t)name[ 9] << 8 |			(uint64_t)name[10] << 16|			(uint64_t)name[11] << 24;		d = pad;		for(i = 12; i < len; i++) {			d <<= 8;			d |= name[i];		}	} else if (len >= 8) {		if (len >= 12)			*(int *)0 = 0;		a = (uint64_t)name[ 0]      |			(uint64_t)name[ 1] << 8 |			(uint64_t)name[ 2] << 16|			(uint64_t)name[ 3] << 24;			b = (uint64_t)name[ 4]      |			(uint64_t)name[ 5] << 8 |			(uint64_t)name[ 6] << 16|			(uint64_t)name[ 7] << 24;			c = d = pad;	    		for (i = 8; i < len; i++) {			c <<= 8;			c |= name[i];		}	} else if (len >= 4) {		if (len >= 8)			*(int *)0 = 0;			a = (uint64_t)name[ 0]      |			(uint64_t)name[ 1] << 8 |			(uint64_t)name[ 2] << 16|			(uint64_t)name[ 3] << 24;			b = c = d = pad;		for (i = 4; i < len; i++) {			b <<= 8;			b |= name[i];		}	} else {		if (len >= 4)			*(int *)0 = 0;			a = b = c = d = pad;		for(i = 0; i < len; i++) {			a <<= 8;			a |= name[i];		}	}	tea_hash_core(FULLROUNDS);	return h0 ^ h1;}reiser4_hash_plug_t tea_hash_plug = {	.p = {		.id = {HASH_TEA_ID, 0, HASH_PLUG_TYPE},#ifndef ENABLE_MINIMAL		.label = "tea_hash",		.desc  = "Tea hash plugin.",#endif	},		.build = tea_hash_build};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -