예제 #1
0
파일: Token.cpp 프로젝트: 12019/Antitoken
void Token::magic_sum64(BYTE out[64], BYTE v1[20], BYTE v2[64]){
	BYTE v1_64[64];

	memset(out, 0, 64);
	for (int i = 0; i < 64; i++) v1_64[i] = v1[i % 20]; // now v1_64 is 64 bytes

	invert_bytes(v1_64, 64);
	invert_bytes(v2, 64);
	//cout << "magic_sum64 v1="; showarr(v1_64, 64, ':');//DEBUG
	//cout << "magic_sum64 v2="; showarr(v2, 64, ':');//DEBUG

	BYTE carry = 1;

	for (int i = 0; i < 64; i++){
		unsigned int r = v1_64[i] + v2[i] + carry;
		carry = r >> 8;
		out[i] = r & 255;
	}

	invert_bytes(out, 64);
	//cout << "magic_sum64 "; showarr(out, 64, ':');//DEBUG
}
예제 #2
0
파일: oilbit.c 프로젝트: LuaDist/oil
static int b_invpack(lua_State *L) {
	luaL_Buffer b;
	size_t lformat, i, last;
	const char *format = luaL_checklstring(L, 1, &lformat);
	if (lformat == 0) {
		lua_pushliteral(L, "");
		return 1;
	}
	luaL_checktype(L, 2, LUA_TTABLE);
	i    = luaL_optint(L, 3, 1);
	last = luaL_optint(L, 4, lformat);
	luaL_argcheck(L, i    > 0 && i    <= lformat, 3, "out of bounds");
	luaL_argcheck(L, last > 0 && last <= lformat, 4, "out of bounds");
	luaL_buffinit(L, &b);
	for (; i <= last; i++, format++) {
		size_t size = 1;
		lua_rawgeti(L, 2, i);
		switch (*format) {
#ifdef LARGE_NUMBERS
			case 'D':
#endif
			case 'f': case 'd': size = 0;
#ifdef LARGE_NUMBERS
			case 'g': case 'G': size *= 2;
#endif
			case 'l': case 'L': size *= 2;
			case 's': case 'S': size *= 2;
			case 'b': case 'B': {
				lua_Number number;
				luaL_argcheck(L, lua_isnumber(L, -1), 2, "table contains mismatched values");
				number = lua_tonumber(L, -1);
				lua_pop(L, 1);
				if (size) {
					add_inverted_integer(&b, number, size);
				} else {
					switch (*format) {
						case 'f': {
							float value;
							value = (float)number;
							invert_bytes((byte*)&value, sizeof(value));
							luaL_addlstring(&b, (char*)&value, sizeof(value));
						} break;
						case 'd': {
							double value;
							value = (double)number;
							invert_bytes((byte*)&value, sizeof(value));
							luaL_addlstring(&b, (char*)&value, sizeof(value));
						} break;
#ifdef LARGE_NUMBERS
						case 'D': {
							long double value;
							value = (long double)number;
							invert_bytes((byte*)&value, sizeof(value));
							luaL_addlstring(&b, (char*)&value, sizeof(value));
						} break;
#endif
					}
				}
			}	break;
			case '"':
				luaL_argcheck(L, lua_isstring(L, -1), 2, "table contains mismatched values");
				luaL_addvalue(&b);
				break;
			default: luaL_error(L, "invalid format character, got '%c'", *format);
		}
	}
	luaL_pushresult(&b);
	return 1;
}