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

📄 cksum.c

📁 abstract rtos
💻 C
📖 第 1 页 / 共 2 页
字号:
static VOIDmd5_cksum_block (VOID * data ,				 U32 datalen ,				 U32 totallen ,				 S32 incomplete ,				 U32 * results){    U32 a, b, c, d;    S32 alldone = 0;	    a = results[0];    b = results[1];    c = results[2];    d = results[3];	    {		U8 *dp;		U32 dlen;		U32 *xp;		U32 x[64];				dp = (U8 *) data;		dlen = datalen;				while (dlen) {			xp = x;			if (dlen >= 64) {				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp); xp++;				MD5_GET(*xp, dp);				dlen -= 64;			} else {				AOS_ASSERT(!incomplete);				switch (dlen >> 2) {				case 15:					MD5_GET(*xp, dp); xp++;				case 14:					MD5_GET(*xp, dp); xp++;				case 13:					MD5_GET(*xp, dp); xp++;				case 12:					MD5_GET(*xp, dp); xp++;				case 11:					MD5_GET(*xp, dp); xp++;				case 10:					MD5_GET(*xp, dp); xp++;				case 9:					MD5_GET(*xp, dp); xp++;				case 8:					MD5_GET(*xp, dp); xp++;				case 7:					MD5_GET(*xp, dp); xp++;				case 6:					MD5_GET(*xp, dp); xp++;				case 5:					MD5_GET(*xp, dp); xp++;				case 4:					MD5_GET(*xp, dp); xp++;				case 3:					MD5_GET(*xp, dp); xp++;				case 2:					MD5_GET(*xp, dp); xp++;				case 1:					MD5_GET(*xp, dp); xp++;				default:					break;				}								switch (dlen & 0x3) {				case 3:					*xp = (U32) 0x80000000 | (U32)(*dp++);					*xp |= (U32)(*dp++) << 8;					*xp++ |= (U32)(*dp++) << 16;					break;				case 2:					*xp = (U32) 0x800000 | (U32)(*dp++);					*xp++ |= (U32)(*dp++) << 8;					break;				case 1:					*xp++ = (U32) 0x8000 | (U32)(*dp++);					break;				default:					*xp++ = (U32) 0x80;					break;				}								if (xp >= &(x[15])) {					if (xp == &(x[15])) {						*xp = 0;					}				} else {					while (xp < &(x[14])) {						*xp++ = 0;					}					*xp++ = (((U32)(totallen)) << 3) & 0xffffffff;					*xp = (U32)((totallen >> 29) & 0xffffffff);					alldone = 1;				}				dlen = 0;			}						xp = x;									MD5_OP1(a, b, c, d, xp[ 0],  7, 0xd76aa478);				MD5_OP1(d, a, b, c, xp[ 1], 12, 0xe8c7b756);				MD5_OP1(c, d, a, b, xp[ 2], 17, 0x242070db);				MD5_OP1(b, c, d, a, xp[ 3], 22, 0xc1bdceee);				MD5_OP1(a, b, c, d, xp[ 4],  7, 0xf57c0faf);				MD5_OP1(d, a, b, c, xp[ 5], 12, 0x4787c62a);				MD5_OP1(c, d, a, b, xp[ 6], 17, 0xa8304613);				MD5_OP1(b, c, d, a, xp[ 7], 22, 0xfd469501);				MD5_OP1(a, b, c, d, xp[ 8],  7, 0x698098d8);				MD5_OP1(d, a, b, c, xp[ 9], 12, 0x8b44f7af);				MD5_OP1(c, d, a, b, xp[10], 17, 0xffff5bb1);				MD5_OP1(b, c, d, a, xp[11], 22, 0x895cd7be);				MD5_OP1(a, b, c, d, xp[12],  7, 0x6b901122);				MD5_OP1(d, a, b, c, xp[13], 12, 0xfd987193);				MD5_OP1(c, d, a, b, xp[14], 17, 0xa679438e);				MD5_OP1(b, c, d, a, xp[15], 22, 0x49b40821);										MD5_OP2(a, b, c, d, xp[ 1],  5, 0xf61e2562);				MD5_OP2(d, a, b, c, xp[ 6],  9, 0xc040b340);				MD5_OP2(c, d, a, b, xp[11], 14, 0x265e5a51);				MD5_OP2(b, c, d, a, xp[ 0], 20, 0xe9b6c7aa);				MD5_OP2(a, b, c, d, xp[ 5],  5, 0xd62f105d);				MD5_OP2(d, a, b, c, xp[10],  9, 0x02441453);				MD5_OP2(c, d, a, b, xp[15], 14, 0xd8a1e681);				MD5_OP2(b, c, d, a, xp[ 4], 20, 0xe7d3fbc8);				MD5_OP2(a, b, c, d, xp[ 9],  5, 0x21e1cde6);				MD5_OP2(d, a, b, c, xp[14],  9, 0xc33707d6);				MD5_OP2(c, d, a, b, xp[ 3], 14, 0xf4d50d87);				MD5_OP2(b, c, d, a, xp[ 8], 20, 0x455a14ed);				MD5_OP2(a, b, c, d, xp[13],  5, 0xa9e3e905);				MD5_OP2(d, a, b, c, xp[ 2],  9, 0xfcefa3f8);				MD5_OP2(c, d, a, b, xp[ 7], 14, 0x676f02d9);				MD5_OP2(b, c, d, a, xp[12], 20, 0x8d2a4c8a);										MD5_OP3(a, b, c, d, xp[ 5],  4, 0xfffa3942);				MD5_OP3(d, a, b, c, xp[ 8], 11, 0x8771f681);				MD5_OP3(c, d, a, b, xp[11], 16, 0x6d9d6122);				MD5_OP3(b, c, d, a, xp[14], 23, 0xfde5380c);				MD5_OP3(a, b, c, d, xp[ 1],  4, 0xa4beea44);				MD5_OP3(d, a, b, c, xp[ 4], 11, 0x4bdecfa9);				MD5_OP3(c, d, a, b, xp[ 7], 16, 0xf6bb4b60);				MD5_OP3(b, c, d, a, xp[10], 23, 0xbebfbc70);				MD5_OP3(a, b, c, d, xp[13],  4, 0x289b7ec6);				MD5_OP3(d, a, b, c, xp[ 0], 11, 0xeaa127fa);				MD5_OP3(c, d, a, b, xp[ 3], 16, 0xd4ef3085);				MD5_OP3(b, c, d, a, xp[ 6], 23, 0x04881d05);				MD5_OP3(a, b, c, d, xp[ 9],  4, 0xd9d4d039);				MD5_OP3(d, a, b, c, xp[12], 11, 0xe6db99e5);				MD5_OP3(c, d, a, b, xp[15], 16, 0x1fa27cf8);				MD5_OP3(b, c, d, a, xp[ 2], 23, 0xc4ac5665);										MD5_OP4(a, b, c, d, xp[ 0],  6, 0xf4292244);				MD5_OP4(d, a, b, c, xp[ 7], 10, 0x432aff97);				MD5_OP4(c, d, a, b, xp[14], 15, 0xab9423a7);				MD5_OP4(b, c, d, a, xp[ 5], 21, 0xfc93a039);				MD5_OP4(a, b, c, d, xp[12],  6, 0x655b59c3);				MD5_OP4(d, a, b, c, xp[ 3], 10, 0x8f0ccc92);				MD5_OP4(c, d, a, b, xp[10], 15, 0xffeff47d);				MD5_OP4(b, c, d, a, xp[ 1], 21, 0x85845dd1);				MD5_OP4(a, b, c, d, xp[ 8],  6, 0x6fa87e4f);				MD5_OP4(d, a, b, c, xp[15], 10, 0xfe2ce6e0);				MD5_OP4(c, d, a, b, xp[ 6], 15, 0xa3014314);				MD5_OP4(b, c, d, a, xp[13], 21, 0x4e0811a1);				MD5_OP4(a, b, c, d, xp[ 4],  6, 0xf7537e82);				MD5_OP4(d, a, b, c, xp[11], 10, 0xbd3af235);				MD5_OP4(c, d, a, b, xp[ 2], 15, 0x2ad7d2bb);				MD5_OP4(b, c, d, a, xp[ 9], 21, 0xeb86d391);							a += results[0]; results[0] = a;			b += results[1]; results[1] = b;			c += results[2]; results[2] = c;			d += results[3]; results[3] = d;	}    }	    if (!incomplete && !alldone) {		U32 x0, x14, x15;				x14 = (((U32)(totallen)) << 3) & 0xffffffff;		x15 = (U32)((totallen >> 29) & 0xffffffff);				if (datalen & 0x3f) {			x0 = 0;		} else {			x0 = 0x80;		}						MD5_OP1(a, b, c, d,  x0,  7, 0xd76aa478);			MD5_OP1(d, a, b, c,   0, 12, 0xe8c7b756);			MD5_OP1(c, d, a, b,   0, 17, 0x242070db);			MD5_OP1(b, c, d, a,   0, 22, 0xc1bdceee);			MD5_OP1(a, b, c, d,   0,  7, 0xf57c0faf);			MD5_OP1(d, a, b, c,   0, 12, 0x4787c62a);			MD5_OP1(c, d, a, b,   0, 17, 0xa8304613);			MD5_OP1(b, c, d, a,   0, 22, 0xfd469501);			MD5_OP1(a, b, c, d,   0,  7, 0x698098d8);			MD5_OP1(d, a, b, c,   0, 12, 0x8b44f7af);			MD5_OP1(c, d, a, b,   0, 17, 0xffff5bb1);			MD5_OP1(b, c, d, a,   0, 22, 0x895cd7be);			MD5_OP1(a, b, c, d,   0,  7, 0x6b901122);			MD5_OP1(d, a, b, c,   0, 12, 0xfd987193);			MD5_OP1(c, d, a, b, x14, 17, 0xa679438e);			MD5_OP1(b, c, d, a, x15, 22, 0x49b40821);							MD5_OP2(a, b, c, d,   0,  5, 0xf61e2562);			MD5_OP2(d, a, b, c,   0,  9, 0xc040b340);			MD5_OP2(c, d, a, b,   0, 14, 0x265e5a51);			MD5_OP2(b, c, d, a,  x0, 20, 0xe9b6c7aa);			MD5_OP2(a, b, c, d,   0,  5, 0xd62f105d);			MD5_OP2(d, a, b, c,   0,  9, 0x02441453);			MD5_OP2(c, d, a, b, x15, 14, 0xd8a1e681);			MD5_OP2(b, c, d, a,   0, 20, 0xe7d3fbc8);			MD5_OP2(a, b, c, d,   0,  5, 0x21e1cde6);			MD5_OP2(d, a, b, c, x14,  9, 0xc33707d6);			MD5_OP2(c, d, a, b,   0, 14, 0xf4d50d87);			MD5_OP2(b, c, d, a,   0, 20, 0x455a14ed);			MD5_OP2(a, b, c, d,   0,  5, 0xa9e3e905);			MD5_OP2(d, a, b, c,   0,  9, 0xfcefa3f8);			MD5_OP2(c, d, a, b,   0, 14, 0x676f02d9);			MD5_OP2(b, c, d, a,   0, 20, 0x8d2a4c8a);							MD5_OP3(a, b, c, d,   0,  4, 0xfffa3942);			MD5_OP3(d, a, b, c,   0, 11, 0x8771f681);			MD5_OP3(c, d, a, b,   0, 16, 0x6d9d6122);			MD5_OP3(b, c, d, a, x14, 23, 0xfde5380c);			MD5_OP3(a, b, c, d,   0,  4, 0xa4beea44);			MD5_OP3(d, a, b, c,   0, 11, 0x4bdecfa9);			MD5_OP3(c, d, a, b,   0, 16, 0xf6bb4b60);			MD5_OP3(b, c, d, a,   0, 23, 0xbebfbc70);			MD5_OP3(a, b, c, d,   0,  4, 0x289b7ec6);			MD5_OP3(d, a, b, c,  x0, 11, 0xeaa127fa);			MD5_OP3(c, d, a, b,   0, 16, 0xd4ef3085);			MD5_OP3(b, c, d, a,   0, 23, 0x04881d05);			MD5_OP3(a, b, c, d,   0,  4, 0xd9d4d039);			MD5_OP3(d, a, b, c,   0, 11, 0xe6db99e5);			MD5_OP3(c, d, a, b, x15, 16, 0x1fa27cf8);			MD5_OP3(b, c, d, a,   0, 23, 0xc4ac5665);							MD5_OP4(a, b, c, d,  x0,  6, 0xf4292244);			MD5_OP4(d, a, b, c,   0, 10, 0x432aff97);			MD5_OP4(c, d, a, b, x14, 15, 0xab9423a7);			MD5_OP4(b, c, d, a,   0, 21, 0xfc93a039);			MD5_OP4(a, b, c, d,   0,  6, 0x655b59c3);			MD5_OP4(d, a, b, c,   0, 10, 0x8f0ccc92);			MD5_OP4(c, d, a, b,   0, 15, 0xffeff47d);			MD5_OP4(b, c, d, a,   0, 21, 0x85845dd1);			MD5_OP4(a, b, c, d,   0,  6, 0x6fa87e4f);			MD5_OP4(d, a, b, c, x15, 10, 0xfe2ce6e0);			MD5_OP4(c, d, a, b,   0, 15, 0xa3014314);			MD5_OP4(b, c, d, a,   0, 21, 0x4e0811a1);			MD5_OP4(a, b, c, d,   0,  6, 0xf7537e82);			MD5_OP4(d, a, b, c,   0, 10, 0xbd3af235);			MD5_OP4(c, d, a, b,   0, 15, 0x2ad7d2bb);			MD5_OP4(b, c, d, a,   0, 21, 0xeb86d391);					results[0] += a;		results[1] += b;		results[2] += c;		results[3] += d;    }}U32md5_cksum_partial (VOID * data ,				   VOID * upto ,				   S32 newdata ,				   U32 * results){    U32 dolen;	    if (newdata) {		results[0] = MD5_A_INIT;		results[1] = MD5_B_INIT;		results[2] = MD5_C_INIT;		results[3] = MD5_D_INIT;    }	    dolen = ((U8 *) upto - (U8 *) data) & (~((U32) 0x3f));    if (dolen) {		md5_cksum_block(data, dolen, (U32) 0, 1, results);    }	    return dolen;}VOIDMD5_Cksum (VOID * data ,		   U32 datalen ,		   U32 totallen ,		   VOID * digest ,		   U32 * init){    U8 *dp;    U32 *tp;    U32 temp[4];	    tp = temp;    if (init) {		tp[0] = init[0];		tp[1] = init[1];		tp[2] = init[2];		tp[3] = init[3];    } else {		tp[0] = MD5_A_INIT;		tp[1] = MD5_B_INIT;		tp[2] = MD5_C_INIT;		tp[3] = MD5_D_INIT;    }	    md5_cksum_block(data, datalen, totallen, 0, temp);	    dp = (U8 *) digest;    MD5_PUT(*tp, dp); tp++;    MD5_PUT(*tp, dp); tp++;    MD5_PUT(*tp, dp); tp++;    MD5_PUT(*tp, dp);}#endif	#ifdef __cplusplus#if __cplusplus}#endif #endif 

⌨️ 快捷键说明

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