亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? md5.c

?? 基于sip協(xié)議的網(wǎng)絡(luò)電話源碼
?? C
字號:
/* $Id: md5.c 974 2007-02-19 01:13:53Z bennylp $ *//*  * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#include <pjlib-util/md5.h>#include <pj/string.h>		/* pj_memcpy *//* * This code implements the MD5 message-digest algorithm. * The algorithm is due to Ron Rivest.  This code was * written by Colin Plumb in 1993, no copyright is claimed. * This code is in the public domain; do with it what you wish. * * Equivalent code is available from RSA Data Security, Inc. * This code has been tested against that, and is equivalent, * except that you don't need to include two pages of legalese * with every copy. * * To compute the message digest of a chunk of bytes, declare an * MD5Context structure, pass it to MD5Init, call MD5Update as * needed on buffers full of bytes, and then call MD5Final, which * will fill a supplied 16-byte array with the digest. */#if defined(PJ_IS_BIG_ENDIAN) && PJ_IS_BIG_ENDIAN != 0#define HIGHFIRST 1#endif#ifndef HIGHFIRST#define byteReverse(buf, len)	/* Nothing */#elsevoid byteReverse(unsigned char *buf, unsigned longs);#ifndef ASM_MD5/* * Note: this code is harmless on little-endian machines. */void byteReverse(unsigned char *buf, unsigned longs){    pj_uint32_t t;    do {	t = (pj_uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 |	    ((unsigned) buf[1] << 8 | buf[0]);	*(pj_uint32_t *) buf = t;	buf += 4;    } while (--longs);}#endif#endifstatic void MD5Transform(pj_uint32_t buf[4], pj_uint32_t const in[16]);/* * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious * initialization constants. */PJ_DEF(void) pj_md5_init(pj_md5_context *ctx){    ctx->buf[0] = 0x67452301;    ctx->buf[1] = 0xefcdab89;    ctx->buf[2] = 0x98badcfe;    ctx->buf[3] = 0x10325476;    ctx->bits[0] = 0;    ctx->bits[1] = 0;}/* * Update context to reflect the concatenation of another buffer full * of bytes. */PJ_DEF(void) pj_md5_update( pj_md5_context *ctx, 			    unsigned char const *buf, unsigned len){    pj_uint32_t t;    /* Update bitcount */    t = ctx->bits[0];    if ((ctx->bits[0] = t + ((pj_uint32_t) len << 3)) < t)	ctx->bits[1]++;		/* Carry from low to high */    ctx->bits[1] += len >> 29;    t = (t >> 3) & 0x3f;	/* Bytes already in shsInfo->data */    /* Handle any leading odd-sized chunks */    if (t) {	unsigned char *p = (unsigned char *) ctx->in + t;	t = 64 - t;	if (len < t) {	    pj_memcpy(p, buf, len);	    return;	}	pj_memcpy(p, buf, t);	byteReverse(ctx->in, 16);	MD5Transform(ctx->buf, (pj_uint32_t *) ctx->in);	buf += t;	len -= t;    }    /* Process data in 64-byte chunks */    while (len >= 64) {	pj_memcpy(ctx->in, buf, 64);	byteReverse(ctx->in, 16);	MD5Transform(ctx->buf, (pj_uint32_t *) ctx->in);	buf += 64;	len -= 64;    }    /* Handle any remaining bytes of data. */    pj_memcpy(ctx->in, buf, len);}/* * Final wrapup - pad to 64-byte boundary with the bit pattern  * 1 0* (64-bit count of bits processed, MSB-first) */PJ_DEF(void) pj_md5_final(pj_md5_context *ctx, unsigned char digest[16]){    unsigned count;    unsigned char *p;    /* Compute number of bytes mod 64 */    count = (ctx->bits[0] >> 3) & 0x3F;    /* Set the first char of padding to 0x80.  This is safe since there is       always at least one byte free */    p = ctx->in + count;    *p++ = 0x80;    /* Bytes of padding needed to make 64 bytes */    count = 64 - 1 - count;    /* Pad out to 56 mod 64 */    if (count < 8) {	/* Two lots of padding:  Pad the first block to 64 bytes */	pj_bzero(p, count);	byteReverse(ctx->in, 16);	MD5Transform(ctx->buf, (pj_uint32_t *) ctx->in);	/* Now fill the next block with 56 bytes */	pj_bzero(ctx->in, 56);    } else {	/* Pad block to 56 bytes */	pj_bzero(p, count - 8);    }    byteReverse(ctx->in, 14);    /* Append length in bits and transform */    ((pj_uint32_t *) ctx->in)[14] = ctx->bits[0];    ((pj_uint32_t *) ctx->in)[15] = ctx->bits[1];    MD5Transform(ctx->buf, (pj_uint32_t *) ctx->in);    byteReverse((unsigned char *) ctx->buf, 4);    pj_memcpy(digest, ctx->buf, 16);    pj_bzero(ctx, sizeof(ctx));	/* In case it's sensitive */}#ifndef ASM_MD5/* The four core functions - F1 is optimized somewhat *//* #define F1(x, y, z) (x & y | ~x & z) */#define F1(x, y, z) (z ^ (x & (y ^ z)))#define F2(x, y, z) F1(z, x, y)#define F3(x, y, z) (x ^ y ^ z)#define F4(x, y, z) (y ^ (x | ~z))/* This is the central step in the MD5 algorithm. */#define MD5STEP(f, w, x, y, z, data, s) \	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )/* * The core of the MD5 algorithm, this alters an existing MD5 hash to * reflect the addition of 16 longwords of new data.  MD5Update blocks * the data and converts bytes into longwords for this routine. */static void MD5Transform(pj_uint32_t buf[4], pj_uint32_t const in[16]){    register pj_uint32_t a, b, c, d;    a = buf[0];    b = buf[1];    c = buf[2];    d = buf[3];    MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);    MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);    MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);    MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);    MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);    MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);    MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);    MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);    MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);    MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);    MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);    MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);    MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);    MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);    MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);    MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);    MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);    MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);    MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);    MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);    MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);    MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);    MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);    MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);    MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);    MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);    MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);    MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);    MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);    MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);    MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);    MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);    MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);    MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);    MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);    MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);    MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);    MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);    MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);    MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);    MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);    MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);    MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);    MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);    MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);    MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);    MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);    MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);    MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);    MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);    MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);    MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);    MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);    MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);    MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);    MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);    MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);    MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);    MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);    MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);    MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);    MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);    MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);    MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);    buf[0] += a;    buf[1] += b;    buf[2] += c;    buf[3] += d;}#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线观看你懂的| 久久久久久久久久美女| 久久久久久免费毛片精品| 亚洲色图欧美激情| 国产成人啪午夜精品网站男同| 欧美综合一区二区三区| 国产精品成人免费精品自在线观看 | 国产乱码精品一区二区三区五月婷| av在线综合网| 国产欧美中文在线| 玖玖九九国产精品| 欧美日韩亚洲综合| 亚洲一区二区三区在线播放| 高潮精品一区videoshd| 日韩免费一区二区三区在线播放| 亚洲自拍偷拍麻豆| 色综合久久久久久久久| 国产精品久久久久一区| 国产美女精品人人做人人爽| 日韩亚洲欧美在线观看| 五月天丁香久久| 欧美日韩一级二级| 亚洲一二三区不卡| 欧美中文字幕一区| 亚洲自拍偷拍网站| 在线观看网站黄不卡| 一区二区视频在线看| 成人黄色软件下载| 中文字幕免费在线观看视频一区| 国内精品视频666| 久久久久久久久久美女| 在线成人小视频| 三级欧美韩日大片在线看| 欧美日韩国产综合草草| 五月婷婷综合在线| 欧美久久久影院| 免费看日韩精品| 精品欧美一区二区在线观看 | 国产日韩精品一区二区三区 | 日韩av在线免费观看不卡| 欧美性高清videossexo| 午夜久久久久久久久久一区二区| 欧美日韩一区二区三区四区五区 | 欧美性欧美巨大黑白大战| 一区二区三区在线观看视频 | 99国产精品99久久久久久| 中文字幕中文字幕中文字幕亚洲无线| www.激情成人| 亚洲国产另类精品专区| 91精品国产入口| 国产自产v一区二区三区c| 国产亚洲成aⅴ人片在线观看| 国产盗摄精品一区二区三区在线 | 成人性生交大片免费看中文| 天堂蜜桃91精品| av高清久久久| 亚洲电影一级片| 精品国产a毛片| 成人高清在线视频| 亚洲影视在线播放| 精品人伦一区二区色婷婷| 国产成人精品影视| 亚洲卡通欧美制服中文| 91精品国产aⅴ一区二区| 国内精品免费**视频| 亚洲欧洲综合另类在线| 9191成人精品久久| 国产黑丝在线一区二区三区| 中文成人av在线| 欧美人伦禁忌dvd放荡欲情| 国产一区视频导航| 亚洲精品老司机| 一区二区三区四区乱视频| 亚洲精品在线观看视频| 岛国精品一区二区| 视频在线观看一区二区三区| 日韩影视精彩在线| 国产免费成人在线视频| 欧美日韩成人高清| www.爱久久.com| 麻豆91精品视频| 一级日本不卡的影视| 国产丝袜在线精品| 91精品婷婷国产综合久久 | 粉嫩一区二区三区在线看| 一区二区三区 在线观看视频| 精品日韩在线观看| 欧美日韩一级黄| 91麻豆精东视频| 国产高清在线观看免费不卡| 日韩中文字幕1| 亚洲久本草在线中文字幕| 国产嫩草影院久久久久| 欧美一二三四区在线| 欧美日韩美少妇| 91九色最新地址| 精品一区二区三区在线播放| 日韩高清一区在线| 欧美日韩国产成人在线免费| eeuss鲁一区二区三区| 国产久卡久卡久卡久卡视频精品| 日日夜夜精品免费视频| 亚洲欧洲制服丝袜| 国产盗摄女厕一区二区三区 | 国产精品自拍在线| 麻豆精品久久精品色综合| 亚洲国产一区视频| 亚洲一二三专区| 亚洲人成网站色在线观看| 国产精品理伦片| 国产精品成人一区二区艾草| 亚洲国产精品ⅴa在线观看| 亚洲精品一区二区三区影院 | 色狠狠综合天天综合综合| 成人激情免费视频| 成人福利视频网站| av激情综合网| 91久久精品一区二区| 欧美色综合久久| 欧美日韩成人综合| 777久久久精品| 午夜精品一区二区三区电影天堂| 一级女性全黄久久生活片免费| 亚洲欧美另类在线| 一区二区三区在线免费视频| 亚洲成人激情综合网| 日本美女一区二区三区视频| 麻豆精品在线看| 国产成人精品影院| 91麻豆蜜桃一区二区三区| 欧美网站一区二区| 日韩一区二区三区视频| 欧美精品一区二区三区蜜臀| 国产无一区二区| 一区二区三区在线播| 一区二区三区四区五区视频在线观看| 亚洲综合成人在线视频| 蜜桃视频一区二区三区在线观看| 黄页网站大全一区二区| 99久久伊人精品| 欧美日韩国产色站一区二区三区| 欧美电影免费观看高清完整版| 久久精品视频一区二区三区| 国产精品高潮久久久久无| 亚洲成在人线在线播放| 色狠狠色狠狠综合| 91精品国产综合久久久久久漫画| 日韩欧美高清在线| 国产精品69久久久久水密桃| 成人夜色视频网站在线观看| 色狠狠综合天天综合综合| 亚洲精品精品亚洲| 国产精品1区2区| 不卡av电影在线播放| 欧美日韩国产另类不卡| 久久久国产综合精品女国产盗摄| 自拍偷拍亚洲激情| 蜜臀av一区二区三区| 99综合影院在线| 日韩亚洲欧美综合| 亚洲私人影院在线观看| 久久国产欧美日韩精品| 在线看国产一区二区| 欧美不卡视频一区| 亚洲在线免费播放| 国产成人免费网站| 日韩欧美国产一区在线观看| 中文一区二区在线观看| 日本v片在线高清不卡在线观看| 成人国产精品免费观看| 精品女同一区二区| 午夜视频在线观看一区二区| 成人午夜视频在线| 精品久久久久久亚洲综合网| 亚洲一区二区三区国产| 成人激情电影免费在线观看| 欧美一区二区性放荡片| 亚洲精品中文在线| 福利视频网站一区二区三区| 亚洲国产三级在线| 亚洲国产精品一区二区久久恐怖片| 亚洲六月丁香色婷婷综合久久| 国产成人综合在线观看| 日韩美女一区二区三区四区| 午夜精品一区二区三区电影天堂| eeuss影院一区二区三区| 国产午夜精品久久久久久免费视| 欧美亚洲国产bt| 国产精品久久久久永久免费观看 | 欧美激情一区不卡| 精品一区二区在线视频| 日韩三级在线免费观看| 丝袜亚洲另类欧美综合| 欧美日韩一区二区在线视频| 亚洲精选视频免费看| 色狠狠av一区二区三区| 亚洲欧美另类久久久精品| 色综合网色综合| 亚洲午夜日本在线观看| 欧美日韩精品一区视频|