Annotate

util-src/hashes.c @ 12084:59557bc3c4b8 0.11

net.server_epoll: Process all queued events from epoll before timers Should call timers less frequently when many sockets are waiting for processing. May help under heavy load. Requested by Ge0rG Backport of 2bcd84123eba requested by Roi
author Kim Alvefur <zash@zash.se>
date Thu, 21 Oct 2021 15:59:16 +0200
parent 11541:13b84682518e
child 11560:3bbb1af92514
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 441
diff changeset
8 */
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 441
diff changeset
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 }