local _md5 = _G.md5 or function () return false end local _sha256 = _G.sha256 or function () return false end local _hash = _G.hash or function () return false end local CACHE = {} -- CACHE para o hash HMAC local CACHE_2 = {} -- CACHE para o hash MD5 e SHA256 function md5(Str) assert(type(Str) == 'string', 'Defina uma string para o hash MD5') if (CACHE_2['md5'] or {})[Str] then return CACHE_2['md5'][Str] end local Md5Hash = _md5(Str) if not CACHE_2['md5'] then CACHE_2['md5'] = {} end if not CACHE_2['md5'][Str] then CACHE_2['md5'][Str] = Md5Hash and Md5Hash:lower() or false end return CACHE_2['md5'][Str] end function sha256(Str) assert(type(Str) == 'string', 'Defina uma string para o hash SHA256') if (CACHE_2['sha256'] or {})[Str] then return CACHE_2['sha256'][Str] end local Sha256Hash = _sha256(Str) if not CACHE_2['sha256'] then CACHE_2['sha256'] = {} end if not CACHE_2['sha256'][Str] then CACHE_2['sha256'][Str] = Sha256Hash and Sha256Hash:lower() or false end return CACHE_2['sha256'][Str] end function hmac(Str, Key, Algorithm) assert(type(Str) == 'string', 'Defina uma string para o hash HMAC') assert(type(Key) == 'string', 'Defina uma chave para o hash HMAC') assert(type(Algorithm) == 'string', 'Defina um algoritmo para o hash HMAC') if (CACHE[Algorithm] and CACHE[Algorithm][Str] or {})[Key] then return CACHE[Algorithm][Str][Key] end local HmacHash = _hash('hmac', Str, {key = Key, algorithm = Algorithm}) if not CACHE[Algorithm] then CACHE[Algorithm] = {} end if not CACHE[Algorithm][Str] then CACHE[Algorithm][Str] = {} end if not CACHE[Algorithm][Str][Key] then CACHE[Algorithm][Str][Key] = HmacHash and HmacHash:lower() or Str end return CACHE[Algorithm][Str][Key] end setTimer(function() CACHE = {} CACHE_2 = {} end, 60 * 1000, 0) return true;