X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;ds=sidebyside;f=util%2Fhmac.lua;h=2c4cc6ef549de995611665505d38eada12ecae18;hb=f6b3f550857678d676b31c5338f4bc6a93df1339;hp=ffd69d91e9444625b5919961ad69e6cd7bbe29bb;hpb=826bfa08856c6365d183c07bfadd4056498e046d;p=prosody.git diff --git a/util/hmac.lua b/util/hmac.lua index ffd69d91..2c4cc6ef 100644 --- a/util/hmac.lua +++ b/util/hmac.lua @@ -1,78 +1,15 @@ -- Prosody IM --- Copyright (C) 2008-2009 Matthew Wild --- Copyright (C) 2008-2009 Waqas Hussain --- +-- Copyright (C) 2008-2010 Matthew Wild +-- Copyright (C) 2008-2010 Waqas Hussain +-- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- -local hashes = require "util.hashes" -local xor = require "bit".bxor - -local t_insert, t_concat = table.insert, table.concat; -local s_char = string.char; - -module "hmac" - -local function arraystr(array) - local t = {} - for i = 1,#array do - t_insert(t, s_char(array[i])) - end - - return t_concat(t) -end - ---[[ -key - the key to use in the hash -message - the message to hash -hash - the hash function -blocksize - the blocksize for the hash function in bytes -hex - return raw hash or hexadecimal string ---]] -function hmac(key, message, hash, blocksize, hex) - local opad = {} - local ipad = {} - - for i = 1,blocksize do - opad[i] = 0x5c - ipad[i] = 0x36 - end +-- COMPAT: Only for external pre-0.9 modules - if #key > blocksize then - key = hash(key) - end - - for i = 1,#key do - ipad[i] = xor(ipad[i],key:sub(i,i):byte()) - opad[i] = xor(opad[i],key:sub(i,i):byte()) - end - - opad = arraystr(opad) - ipad = arraystr(ipad) - - if hex then - return hash(opad..hash(ipad..message), true) - else - return hash(opad..hash(ipad..message)) - end -end - -function md5(key, message, hex) - return hmac(key, message, hashes.md5, 64, hex) -end - -function sha1(key, message, hex) - return hmac(key, message, hashes.sha1, 64, hex) -end - -function sha256(key, message, hex) - return hmac(key, message, hashes.sha256, 64, hex) -end +local hashes = require "util.hashes" -return _M +return { md5 = hashes.hmac_md5, + sha1 = hashes.hmac_sha1, + sha256 = hashes.hmac_sha256 };