Software /
code /
prosody
Annotate
util-src/hashes.c @ 11548:55ef50d6cf65 0.11
core.certmanager: Attempt to directly access LuaSec config table
Due to a bug this field was not properly exported before
See https://github.com/brunoos/luasec/issues/149
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 26 Apr 2021 15:30:13 +0200 |
parent | 11541:13b84682518e |
child | 11560:3bbb1af92514 |
rev | line source |
---|---|
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
1 /* Prosody IM |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
2 -- Copyright (C) 2009-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
3 -- Copyright (C) 2009-2010 Waqas Hussain |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
4 -- |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
6 -- COPYING file in the source package for more information. |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
7 -- |
520 | 8 */ |
9 | |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
10 /* |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
11 * hashes.c |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
12 * Lua library for sha1, sha256 and md5 hashes |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
13 */ |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
14 |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
15 #include <string.h> |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
16 #include <stdlib.h> |
5576
7656b9f06bb5
util.hashes: inttypes.h not available with MS Windows SDK, use MS specific __int32 instead.
Waqas Hussain <waqas20@gmail.com>
parents:
5538
diff
changeset
|
17 |
7656b9f06bb5
util.hashes: inttypes.h not available with MS Windows SDK, use MS specific __int32 instead.
Waqas Hussain <waqas20@gmail.com>
parents:
5538
diff
changeset
|
18 #ifdef _MSC_VER |
7656b9f06bb5
util.hashes: inttypes.h not available with MS Windows SDK, use MS specific __int32 instead.
Waqas Hussain <waqas20@gmail.com>
parents:
5538
diff
changeset
|
19 typedef unsigned __int32 uint32_t; |
7656b9f06bb5
util.hashes: inttypes.h not available with MS Windows SDK, use MS specific __int32 instead.
Waqas Hussain <waqas20@gmail.com>
parents:
5538
diff
changeset
|
20 #else |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
21 #include <inttypes.h> |
5576
7656b9f06bb5
util.hashes: inttypes.h not available with MS Windows SDK, use MS specific __int32 instead.
Waqas Hussain <waqas20@gmail.com>
parents:
5538
diff
changeset
|
22 #endif |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
23 |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
24 #include "lua.h" |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
25 #include "lauxlib.h" |
11541
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
26 #include <openssl/crypto.h> |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
27 #include <openssl/sha.h> |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
28 #include <openssl/md5.h> |
9962
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
29 #include <openssl/hmac.h> |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
30 |
6789
6b180e77c97a
util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents:
6620
diff
changeset
|
31 #if (LUA_VERSION_NUM == 501) |
6b180e77c97a
util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents:
6620
diff
changeset
|
32 #define luaL_setfuncs(L, R, N) luaL_register(L, NULL, R) |
6413
a552f4170aed
util-src/*.c: Add macro for compiling with Lua 5.2
Kim Alvefur <zash@zash.se>
parents:
6412
diff
changeset
|
33 #endif |
a552f4170aed
util-src/*.c: Add macro for compiling with Lua 5.2
Kim Alvefur <zash@zash.se>
parents:
6412
diff
changeset
|
34 |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
35 #define HMAC_IPAD 0x36363636 |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
36 #define HMAC_OPAD 0x5c5c5c5c |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
37 |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
38 const char *hex_tab = "0123456789abcdef"; |
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
39 void toHex(const unsigned char *in, int length, unsigned char *out) { |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
40 int i; |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
41 |
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
42 for(i = 0; i < length; i++) { |
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
43 out[i * 2] = hex_tab[(in[i] >> 4) & 0xF]; |
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
44 out[i * 2 + 1] = hex_tab[(in[i]) & 0xF]; |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
45 } |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
46 } |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
47 |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
48 #define MAKE_HASH_FUNCTION(myFunc, func, size) \ |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
49 static int myFunc(lua_State *L) { \ |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
50 size_t len; \ |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
51 const char *s = luaL_checklstring(L, 1, &len); \ |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
52 int hex_out = lua_toboolean(L, 2); \ |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
53 unsigned char hash[size], result[size*2]; \ |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
54 func((const unsigned char*)s, len, hash); \ |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
55 if (hex_out) { \ |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
56 toHex(hash, size, result); \ |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
57 lua_pushlstring(L, (char*)result, size*2); \ |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
58 } else { \ |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
59 lua_pushlstring(L, (char*)hash, size);\ |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
60 } \ |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
61 return 1; \ |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
62 } |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
63 |
4828
f3e841521436
util.hashes: Use defined hash function output lengths.
Kim Alvefur <zash@zash.se>
parents:
2923
diff
changeset
|
64 MAKE_HASH_FUNCTION(Lsha1, SHA1, SHA_DIGEST_LENGTH) |
4829
0ebc636faa59
util.hashes: Add sha224, sha384, sha512
Kim Alvefur <zash@zash.se>
parents:
4828
diff
changeset
|
65 MAKE_HASH_FUNCTION(Lsha224, SHA224, SHA224_DIGEST_LENGTH) |
4828
f3e841521436
util.hashes: Use defined hash function output lengths.
Kim Alvefur <zash@zash.se>
parents:
2923
diff
changeset
|
66 MAKE_HASH_FUNCTION(Lsha256, SHA256, SHA256_DIGEST_LENGTH) |
4829
0ebc636faa59
util.hashes: Add sha224, sha384, sha512
Kim Alvefur <zash@zash.se>
parents:
4828
diff
changeset
|
67 MAKE_HASH_FUNCTION(Lsha384, SHA384, SHA384_DIGEST_LENGTH) |
0ebc636faa59
util.hashes: Add sha224, sha384, sha512
Kim Alvefur <zash@zash.se>
parents:
4828
diff
changeset
|
68 MAKE_HASH_FUNCTION(Lsha512, SHA512, SHA512_DIGEST_LENGTH) |
4828
f3e841521436
util.hashes: Use defined hash function output lengths.
Kim Alvefur <zash@zash.se>
parents:
2923
diff
changeset
|
69 MAKE_HASH_FUNCTION(Lmd5, MD5, MD5_DIGEST_LENGTH) |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
70 |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
71 struct hash_desc { |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
72 int (*Init)(void *); |
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
73 int (*Update)(void *, const void *, size_t); |
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
74 int (*Final)(unsigned char *, void *); |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
75 size_t digestLength; |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
76 void *ctx, *ctxo; |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
77 }; |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
78 |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
79 static void hmac(struct hash_desc *desc, const char *key, size_t key_len, |
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
80 const char *msg, size_t msg_len, unsigned char *result) { |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
81 union xory { |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
82 unsigned char bytes[64]; |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
83 uint32_t quadbytes[16]; |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
84 }; |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
85 |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
86 int i; |
5774
6ef79af0c445
util.hashes: Silence compiler warning about pointer signedness
Kim Alvefur <zash@zash.se>
parents:
5768
diff
changeset
|
87 unsigned char hashedKey[64]; /* Maximum used digest length */ |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
88 union xory k_ipad, k_opad; |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
89 |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
90 if(key_len > 64) { |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
91 desc->Init(desc->ctx); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
92 desc->Update(desc->ctx, key, key_len); |
5768
c892709f035d
util.hashes: Correct argument order
Kim Alvefur <zash@zash.se>
parents:
5576
diff
changeset
|
93 desc->Final(hashedKey, desc->ctx); |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
94 key = (const char *)hashedKey; |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
95 key_len = desc->digestLength; |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
96 } |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
97 |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
98 memcpy(k_ipad.bytes, key, key_len); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
99 memset(k_ipad.bytes + key_len, 0, 64 - key_len); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
100 memcpy(k_opad.bytes, k_ipad.bytes, 64); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
101 |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
102 for(i = 0; i < 16; i++) { |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
103 k_ipad.quadbytes[i] ^= HMAC_IPAD; |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
104 k_opad.quadbytes[i] ^= HMAC_OPAD; |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
105 } |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
106 |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
107 desc->Init(desc->ctx); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
108 desc->Update(desc->ctx, k_ipad.bytes, 64); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
109 desc->Init(desc->ctxo); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
110 desc->Update(desc->ctxo, k_opad.bytes, 64); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
111 desc->Update(desc->ctx, msg, msg_len); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
112 desc->Final(result, desc->ctx); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
113 desc->Update(desc->ctxo, result, desc->digestLength); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
114 desc->Final(result, desc->ctxo); |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
115 } |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
116 |
9962
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
117 #define MAKE_HMAC_FUNCTION(myFunc, evp, size, type) \ |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
118 static int myFunc(lua_State *L) { \ |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
119 unsigned char hash[size], result[2*size]; \ |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
120 size_t key_len, msg_len; \ |
9962
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
121 unsigned int out_len; \ |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
122 const char *key = luaL_checklstring(L, 1, &key_len); \ |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
123 const char *msg = luaL_checklstring(L, 2, &msg_len); \ |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
124 const int hex_out = lua_toboolean(L, 3); \ |
9962
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
125 HMAC(evp(), key, key_len, (const unsigned char*)msg, msg_len, (unsigned char*)hash, &out_len); \ |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
126 if (hex_out) { \ |
9962
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
127 toHex(hash, out_len, result); \ |
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
128 lua_pushlstring(L, (char*)result, out_len*2); \ |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
129 } else { \ |
9962
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
130 lua_pushlstring(L, (char*)hash, out_len); \ |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
131 } \ |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
132 return 1; \ |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
133 } |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
134 |
9962
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
135 MAKE_HMAC_FUNCTION(Lhmac_sha1, EVP_sha1, SHA_DIGEST_LENGTH, SHA_CTX) |
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
136 MAKE_HMAC_FUNCTION(Lhmac_sha256, EVP_sha256, SHA256_DIGEST_LENGTH, SHA256_CTX) |
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
137 MAKE_HMAC_FUNCTION(Lhmac_sha512, EVP_sha512, SHA512_DIGEST_LENGTH, SHA512_CTX) |
29bc3dff3419
util.hashes: Use HMAC function provided by OpenSSL (fixes #1345)
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
138 MAKE_HMAC_FUNCTION(Lhmac_md5, EVP_md5, MD5_DIGEST_LENGTH, MD5_CTX) |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
139 |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
140 static int LscramHi(lua_State *L) { |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
141 union xory { |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
142 unsigned char bytes[SHA_DIGEST_LENGTH]; |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
143 uint32_t quadbytes[SHA_DIGEST_LENGTH / 4]; |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
144 }; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
145 int i; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
146 SHA_CTX ctx, ctxo; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
147 unsigned char Ust[SHA_DIGEST_LENGTH]; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
148 union xory Und; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
149 union xory res; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
150 size_t str_len, salt_len; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
151 struct hash_desc desc; |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
152 const char *str = luaL_checklstring(L, 1, &str_len); |
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
153 const char *salt = luaL_checklstring(L, 2, &salt_len); |
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
154 char *salt2; |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
155 const int iter = luaL_checkinteger(L, 3); |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
156 |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
157 desc.Init = (int (*)(void *))SHA1_Init; |
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
158 desc.Update = (int (*)(void *, const void *, size_t))SHA1_Update; |
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
159 desc.Final = (int (*)(unsigned char *, void *))SHA1_Final; |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
160 desc.digestLength = SHA_DIGEST_LENGTH; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
161 desc.ctx = &ctx; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
162 desc.ctxo = &ctxo; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
163 |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
164 salt2 = malloc(salt_len + 4); |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
165 |
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
166 if(salt2 == NULL) { |
6620
50eaefeec013
util-src/*.c: Per convention call luaL_error() as argument to return
Florian Zeitz <florob@babelmonkeys.de>
parents:
6615
diff
changeset
|
167 return luaL_error(L, "Out of memory in scramHi"); |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
168 } |
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
169 |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
170 memcpy(salt2, salt, salt_len); |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
171 memcpy(salt2 + salt_len, "\0\0\0\1", 4); |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
172 hmac(&desc, str, str_len, salt2, salt_len + 4, Ust); |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
173 free(salt2); |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
174 |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
175 memcpy(res.bytes, Ust, sizeof(res)); |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
176 |
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
177 for(i = 1; i < iter; i++) { |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
178 int j; |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
179 hmac(&desc, str, str_len, (char *)Ust, sizeof(Ust), Und.bytes); |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
180 |
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
181 for(j = 0; j < SHA_DIGEST_LENGTH / 4; j++) { |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
182 res.quadbytes[j] ^= Und.quadbytes[j]; |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
183 } |
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
184 |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
185 memcpy(Ust, Und.bytes, sizeof(Ust)); |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
186 } |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
187 |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
188 lua_pushlstring(L, (char *)res.bytes, SHA_DIGEST_LENGTH); |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
189 |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
190 return 1; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
191 } |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
192 |
11541
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
193 static int Lhash_equals(lua_State *L) { |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
194 size_t len1, len2; |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
195 const char *s1 = luaL_checklstring(L, 1, &len1); |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
196 const char *s2 = luaL_checklstring(L, 2, &len2); |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
197 if(len1 == len2) { |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
198 lua_pushboolean(L, CRYPTO_memcmp(s1, s2, len1) == 0); |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
199 } else { |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
200 lua_pushboolean(L, 0); |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
201 } |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
202 return 1; |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
203 } |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
204 |
6615
8e4572a642cb
util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents:
6413
diff
changeset
|
205 static const luaL_Reg Reg[] = { |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
206 { "sha1", Lsha1 }, |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
207 { "sha224", Lsha224 }, |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
208 { "sha256", Lsha256 }, |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
209 { "sha384", Lsha384 }, |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
210 { "sha512", Lsha512 }, |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
211 { "md5", Lmd5 }, |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
212 { "hmac_sha1", Lhmac_sha1 }, |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
213 { "hmac_sha256", Lhmac_sha256 }, |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
214 { "hmac_sha512", Lhmac_sha512 }, |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
215 { "hmac_md5", Lhmac_md5 }, |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
216 { "scram_Hi_sha1", LscramHi }, |
11541
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
217 { "equals", Lhash_equals }, |
5537
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
218 { NULL, NULL } |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
219 }; |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
220 |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
221 LUALIB_API int luaopen_util_hashes(lua_State *L) { |
7818
54669df178c2
util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents:
6789
diff
changeset
|
222 #if (LUA_VERSION_NUM > 501) |
54669df178c2
util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents:
6789
diff
changeset
|
223 luaL_checkversion(L); |
54669df178c2
util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents:
6789
diff
changeset
|
224 #endif |
6411
6c8f6364bc48
util-src/*.c: Don't create globals when loaded
Kim Alvefur <zash@zash.se>
parents:
5774
diff
changeset
|
225 lua_newtable(L); |
6789
6b180e77c97a
util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents:
6620
diff
changeset
|
226 luaL_setfuncs(L, Reg, 0);; |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
227 lua_pushliteral(L, "-3.14"); |
6412
0e94f89d0e62
util-src/*.c: Use the more concise lua_setfield
Kim Alvefur <zash@zash.se>
parents:
6411
diff
changeset
|
228 lua_setfield(L, -2, "version"); |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
229 return 1; |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
230 } |