Software /
code /
prosody
File
util/hmac.lua @ 1471:8b3753b080fc
sessionmanager: Reset bare_sessions[user] after resource conflict resolution. Fixes the other stanza gobbling bug \o/
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 03 Jul 2009 21:47:26 +0100 |
parent | 1456:3135cf40110d |
child | 1481:6401460891b2 |
line wrap: on
line source
local hashes = require "util.hashes" local xor = require "bit".bxor module "hmac" local function arraystr(array) t = {} for i = 1,table.getn(array) do table.insert(t, string.char(array[i])) end return table.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 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 return _M