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 }
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; }