author | Waqas Hussain <waqas20@gmail.com> |
Tue, 21 Sep 2010 17:24:25 +0500 | |
changeset 3502 | 28887137bb1b |
parent 2925 | 692b3c6c5bd2 |
child 3540 | bc139431830b |
permissions | -rw-r--r-- |
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1516
diff
changeset
|
1 |
-- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
2 |
-- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
3 |
-- Copyright (C) 2008-2010 Waqas Hussain |
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1516
diff
changeset
|
4 |
-- |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1516
diff
changeset
|
5 |
-- This project is MIT/X11 licensed. Please see the |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1516
diff
changeset
|
6 |
-- COPYING file in the source package for more information. |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1516
diff
changeset
|
7 |
-- |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1516
diff
changeset
|
8 |
|
1456 | 9 |
local hashes = require "util.hashes" |
10 |
||
1482
9734231a569f
util.hmac: Some optimisations
Matthew Wild <mwild1@gmail.com>
parents:
1481
diff
changeset
|
11 |
local s_char = string.char; |
2314
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
12 |
local s_gsub = string.gsub; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
13 |
local s_rep = string.rep; |
1482
9734231a569f
util.hmac: Some optimisations
Matthew Wild <mwild1@gmail.com>
parents:
1481
diff
changeset
|
14 |
|
1456 | 15 |
module "hmac" |
16 |
||
2314
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
17 |
local xor_map = {0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;1;0;3;2;5;4;7;6;9;8;11;10;13;12;15;14;2;3;0;1;6;7;4;5;10;11;8;9;14;15;12;13;3;2;1;0;7;6;5;4;11;10;9;8;15;14;13;12;4;5;6;7;0;1;2;3;12;13;14;15;8;9;10;11;5;4;7;6;1;0;3;2;13;12;15;14;9;8;11;10;6;7;4;5;2;3;0;1;14;15;12;13;10;11;8;9;7;6;5;4;3;2;1;0;15;14;13;12;11;10;9;8;8;9;10;11;12;13;14;15;0;1;2;3;4;5;6;7;9;8;11;10;13;12;15;14;1;0;3;2;5;4;7;6;10;11;8;9;14;15;12;13;2;3;0;1;6;7;4;5;11;10;9;8;15;14;13;12;3;2;1;0;7;6;5;4;12;13;14;15;8;9;10;11;4;5;6;7;0;1;2;3;13;12;15;14;9;8;11;10;5;4;7;6;1;0;3;2;14;15;12;13;10;11;8;9;6;7;4;5;2;3;0;1;15;14;13;12;11;10;9;8;7;6;5;4;3;2;1;0;}; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
18 |
local function xor(x, y) |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
19 |
local lowx, lowy = x % 16, y % 16; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
20 |
local hix, hiy = (x - lowx) / 16, (y - lowy) / 16; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
21 |
local lowr, hir = xor_map[lowx * 16 + lowy + 1], xor_map[hix * 16 + hiy + 1]; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
22 |
local r = hir * 16 + lowr; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
23 |
return r; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
24 |
end |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
25 |
local opadc, ipadc = s_char(0x5c), s_char(0x36); |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
26 |
local ipad_map = {}; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
27 |
local opad_map = {}; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
28 |
for i=0,255 do |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
29 |
ipad_map[s_char(i)] = s_char(xor(0x36, i)); |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
30 |
opad_map[s_char(i)] = s_char(xor(0x5c, i)); |
1456 | 31 |
end |
32 |
||
33 |
--[[ |
|
34 |
key |
|
1516
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
35 |
the key to use in the hash |
1456 | 36 |
message |
1516
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
37 |
the message to hash |
1456 | 38 |
hash |
1516
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
39 |
the hash function |
1456 | 40 |
blocksize |
1516
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
41 |
the blocksize for the hash function in bytes |
1456 | 42 |
hex |
43 |
return raw hash or hexadecimal string |
|
44 |
--]] |
|
45 |
function hmac(key, message, hash, blocksize, hex) |
|
1516
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
46 |
if #key > blocksize then |
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
47 |
key = hash(key) |
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
48 |
end |
1456 | 49 |
|
2314
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
50 |
local padding = blocksize - #key; |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
51 |
local ipad = s_gsub(key, ".", ipad_map)..s_rep(ipadc, padding); |
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
52 |
local opad = s_gsub(key, ".", opad_map)..s_rep(opadc, padding); |
1456 | 53 |
|
2314
c2e1bde4d84d
Redo merge with Waqas' PBKDF2 optimizations.
Tobias Markmann <tm@ayena.de>
parents:
2290
diff
changeset
|
54 |
return hash(opad..hash(ipad..message), hex) |
1456 | 55 |
end |
56 |
||
57 |
function md5(key, message, hex) |
|
1516
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
58 |
return hmac(key, message, hashes.md5, 64, hex) |
1456 | 59 |
end |
60 |
||
61 |
function sha1(key, message, hex) |
|
1516
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
62 |
return hmac(key, message, hashes.sha1, 64, hex) |
1456 | 63 |
end |
64 |
||
65 |
function sha256(key, message, hex) |
|
1516
4c9bd0527d1d
util.hmac: Convert spaces to tabs
Matthew Wild <mwild1@gmail.com>
parents:
1482
diff
changeset
|
66 |
return hmac(key, message, hashes.sha256, 64, hex) |
1456 | 67 |
end |
68 |
||
69 |
return _M |