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

📄 math.c

📁 unix密码破解软件John the Ripper
💻 C
字号:
/* * This file is part of John the Ripper password cracker, * Copyright (c) 1996-98 by Solar Designer */#include "arch.h"#include "math.h"void add32to64(int64 *dst, unsigned int src){	unsigned int saved;	saved = dst->lo;	dst->lo += src;#if ARCH_INT_GT_32	dst->lo &= 0xFFFFFFFF;#endif	if (dst->lo < saved) dst->hi++;}void add64to64(int64 *dst, int64 *src){	add32to64(dst, src->lo);	dst->hi += src->hi;}void neg64(int64 *dst){	dst->lo = ~dst->lo; dst->hi = ~dst->hi;	add32to64(dst, 1);}static void add32to64m(int64 *dst, unsigned int a){	unsigned int saved;	saved = dst->lo;	dst->lo += a << 16;#if ARCH_INT_GT_32	dst->lo &= 0xFFFFFFFF;#endif	dst->hi += ((dst->lo < saved) ? 1 : 0) + (a >> 16);}void mul32by32(int64 *dst, unsigned int m1, unsigned int m2){	dst->lo = (m1 & 0xFFFF) * (m2 & 0xFFFF);	dst->hi = 0;	add32to64m(dst, (m1 >> 16) * (m2 & 0xFFFF));	add32to64m(dst, (m2 >> 16) * (m1 & 0xFFFF));	dst->hi += (m1 >> 16) * (m2 >> 16);}void mul64by32(int64 *dst, unsigned int m){	int64 tmp;	mul32by32(&tmp, dst->hi, m);	dst->hi = tmp.lo;	mul32by32(&tmp, dst->lo, m);	dst->lo = tmp.lo;	dst->hi += tmp.hi;}void pow64of32(int64 *dst, unsigned int x, int n){	dst->lo = 1; dst->hi = 0;	while (n--) mul64by32(dst, x);}unsigned int div64by32lo(int64 *src, unsigned int d){	unsigned int lo, hi, q, s, mask;	lo = src->lo; hi = src->hi;#if ARCH_INT_GT_32	hi += lo >> 32;	lo &= 0xFFFFFFFF;#endif	if (hi >= d) return 0xFFFFFFFF;	q = 0; mask = 0x80000000;	do {		s = hi;		hi = (hi << 1) | (lo >> 31);		lo <<= 1;#if ARCH_INT_GT_32		lo &= 0xFFFFFFFF;#endif		if ((s & 0x80000000) || hi >= d) {			hi -= d;			q |= mask;		}	} while (mask >>= 1);	return q;}void div64by32(int64 *dst, unsigned int d){	int64 tmp;	tmp.lo = dst->lo;	tmp.hi = dst->hi % d;	dst->lo = div64by32lo(&tmp, d);	dst->hi /= d;}

⌨️ 快捷键说明

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