Software /
code /
prosody
Annotate
util-src/hashes.c @ 12804:3eef052c72d8
mod_c2s: Advertise stanza size limit to clients
Should help clients avoid sending stanzas that will get their stream
killed. Custom namespace while ironing out the protocol.
My spoon is too big!
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 16 Mar 2021 18:17:05 +0100 |
parent | 12575:1f6f05a98fcd |
child | 12836:dbe9781fd278 |
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> |
9965
d8e645b4d195
util.hashes: Use PBKDF2 from libcrypto
Kim Alvefur <zash@zash.se>
parents:
9963
diff
changeset
|
30 #include <openssl/evp.h> |
12565
2e0c7f5cd8f8
util.hashes: Return OpenSSL error messages on failure
Kim Alvefur <zash@zash.se>
parents:
12564
diff
changeset
|
31 #include <openssl/err.h> |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
32 |
6413
a552f4170aed
util-src/*.c: Add macro for compiling with Lua 5.2
Kim Alvefur <zash@zash.se>
parents:
6412
diff
changeset
|
33 |
10480
94cacf9fd0ae
util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9970
diff
changeset
|
34 static const char *hex_tab = "0123456789abcdef"; |
94cacf9fd0ae
util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9970
diff
changeset
|
35 static 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
|
36 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
|
37 |
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
|
38 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
|
39 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
|
40 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
|
41 } |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
42 } |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
43 |
12559
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
44 static int Levp_hash(lua_State *L, const EVP_MD *evp) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
45 size_t len; |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
46 unsigned int size = EVP_MAX_MD_SIZE; |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
47 const char *s = luaL_checklstring(L, 1, &len); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
48 int hex_out = lua_toboolean(L, 2); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
49 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
50 unsigned char hash[EVP_MAX_MD_SIZE], result[EVP_MAX_MD_SIZE * 2]; |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
51 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
52 EVP_MD_CTX *ctx = EVP_MD_CTX_new(); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
53 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
54 if(ctx == NULL) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
55 goto fail; |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
56 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
57 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
58 if(!EVP_DigestInit_ex(ctx, evp, NULL)) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
59 goto fail; |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
60 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
61 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
62 if(!EVP_DigestUpdate(ctx, s, len)) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
63 goto fail; |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
64 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
65 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
66 if(!EVP_DigestFinal_ex(ctx, hash, &size)) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
67 goto fail; |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
68 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
69 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
70 EVP_MD_CTX_free(ctx); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
71 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
72 if(hex_out) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
73 toHex(hash, size, result); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
74 lua_pushlstring(L, (char *)result, size * 2); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
75 } else { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
76 lua_pushlstring(L, (char *)hash, size); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
77 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
78 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
79 return 1; |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
80 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
81 fail: |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
82 EVP_MD_CTX_free(ctx); |
12565
2e0c7f5cd8f8
util.hashes: Return OpenSSL error messages on failure
Kim Alvefur <zash@zash.se>
parents:
12564
diff
changeset
|
83 return luaL_error(L, ERR_error_string(ERR_get_error(), NULL)); |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
84 } |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
85 |
12559
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
86 static int Lsha1(lua_State *L) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
87 return Levp_hash(L, EVP_sha1()); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
88 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
89 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
90 static int Lsha224(lua_State *L) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
91 return Levp_hash(L, EVP_sha224()); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
92 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
93 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
94 static int Lsha256(lua_State *L) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
95 return Levp_hash(L, EVP_sha256()); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
96 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
97 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
98 static int Lsha384(lua_State *L) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
99 return Levp_hash(L, EVP_sha384()); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
100 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
101 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
102 static int Lsha512(lua_State *L) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
103 return Levp_hash(L, EVP_sha512()); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
104 } |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
105 |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
106 static int Lmd5(lua_State *L) { |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
107 return Levp_hash(L, EVP_md5()); |
865631ebb9f2
util.hashes: Refactor hash functions to use OpenSSL EVP methods (fix #1698)
Kim Alvefur <zash@zash.se>
parents:
11562
diff
changeset
|
108 } |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
109 |
12563
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
110 static int Lblake2s256(lua_State *L) { |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
111 return Levp_hash(L, EVP_blake2s256()); |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
112 } |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
113 |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
114 static int Lblake2b512(lua_State *L) { |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
115 return Levp_hash(L, EVP_blake2b512()); |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
116 } |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
117 |
12564
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
118 static int Lsha3_256(lua_State *L) { |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
119 return Levp_hash(L, EVP_sha3_256()); |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
120 } |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
121 |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
122 static int Lsha3_512(lua_State *L) { |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
123 return Levp_hash(L, EVP_sha3_512()); |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
124 } |
12563
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
125 |
12560
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
126 static int Levp_hmac(lua_State *L, const EVP_MD *evp) { |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
127 unsigned char hash[EVP_MAX_MD_SIZE], result[EVP_MAX_MD_SIZE * 2]; |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
128 size_t key_len, msg_len; |
12568
fc6213104d78
util.hashes: Revert to HMAC() convenience function
Kim Alvefur <zash@zash.se>
parents:
12567
diff
changeset
|
129 unsigned int out_len = EVP_MAX_MD_SIZE; |
12560
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
130 const char *key = luaL_checklstring(L, 1, &key_len); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
131 const char *msg = luaL_checklstring(L, 2, &msg_len); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
132 const int hex_out = lua_toboolean(L, 3); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
133 |
12568
fc6213104d78
util.hashes: Revert to HMAC() convenience function
Kim Alvefur <zash@zash.se>
parents:
12567
diff
changeset
|
134 if(HMAC(evp, key, key_len, (const unsigned char*)msg, msg_len, (unsigned char*)hash, &out_len) == NULL) { |
12560
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
135 goto fail; |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
136 } |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
137 |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
138 if(hex_out) { |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
139 toHex(hash, out_len, result); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
140 lua_pushlstring(L, (char *)result, out_len * 2); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
141 } else { |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
142 lua_pushlstring(L, (char *)hash, out_len); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
143 } |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
144 |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
145 return 1; |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
146 |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
147 fail: |
12565
2e0c7f5cd8f8
util.hashes: Return OpenSSL error messages on failure
Kim Alvefur <zash@zash.se>
parents:
12564
diff
changeset
|
148 return luaL_error(L, ERR_error_string(ERR_get_error(), NULL)); |
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
|
149 } |
15464633d8fb
util.hmac, util.hashes: Implement HMAC functions in C, and move to util.hashes
Florian Zeitz <florob@babelmonkeys.de>
parents:
4829
diff
changeset
|
150 |
12560
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
151 static int Lhmac_sha1(lua_State *L) { |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
152 return Levp_hmac(L, EVP_sha1()); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
153 } |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
154 |
12561
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
155 static int Lhmac_sha224(lua_State *L) { |
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
156 return Levp_hmac(L, EVP_sha224()); |
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
157 } |
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
158 |
12560
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
159 static int Lhmac_sha256(lua_State *L) { |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
160 return Levp_hmac(L, EVP_sha256()); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
161 } |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
162 |
12561
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
163 static int Lhmac_sha384(lua_State *L) { |
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
164 return Levp_hmac(L, EVP_sha384()); |
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
165 } |
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
166 |
12560
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
167 static int Lhmac_sha512(lua_State *L) { |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
168 return Levp_hmac(L, EVP_sha512()); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
169 } |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
170 |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
171 static int Lhmac_md5(lua_State *L) { |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
172 return Levp_hmac(L, EVP_md5()); |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
173 } |
1e41dd0f8353
util.hashes: Refactor HMAC bindings (fixes #1589)
Kim Alvefur <zash@zash.se>
parents:
12559
diff
changeset
|
174 |
12564
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
175 static int Lhmac_sha3_256(lua_State *L) { |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
176 return Levp_hmac(L, EVP_sha3_256()); |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
177 } |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
178 |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
179 static int Lhmac_sha3_512(lua_State *L) { |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
180 return Levp_hmac(L, EVP_sha3_512()); |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
181 } |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
182 |
12563
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
183 static int Lhmac_blake2s256(lua_State *L) { |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
184 return Levp_hmac(L, EVP_blake2s256()); |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
185 } |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
186 |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
187 static int Lhmac_blake2b512(lua_State *L) { |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
188 return Levp_hmac(L, EVP_blake2b512()); |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
189 } |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
190 |
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
|
191 |
12562
4f4d096a14cb
util.hashes: Refactor PBKDF2 to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
12561
diff
changeset
|
192 static int Levp_pbkdf2(lua_State *L, const EVP_MD *evp, size_t out_len) { |
4f4d096a14cb
util.hashes: Refactor PBKDF2 to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
12561
diff
changeset
|
193 unsigned char out[EVP_MAX_MD_SIZE]; |
9970
4a43feb9ab15
Backed out changeset 61bc5c52c941
Kim Alvefur <zash@zash.se>
parents:
9969
diff
changeset
|
194 |
9965
d8e645b4d195
util.hashes: Use PBKDF2 from libcrypto
Kim Alvefur <zash@zash.se>
parents:
9963
diff
changeset
|
195 size_t pass_len, salt_len; |
d8e645b4d195
util.hashes: Use PBKDF2 from libcrypto
Kim Alvefur <zash@zash.se>
parents:
9963
diff
changeset
|
196 const char *pass = luaL_checklstring(L, 1, &pass_len); |
d8e645b4d195
util.hashes: Use PBKDF2 from libcrypto
Kim Alvefur <zash@zash.se>
parents:
9963
diff
changeset
|
197 const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len); |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
198 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
|
199 |
12562
4f4d096a14cb
util.hashes: Refactor PBKDF2 to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
12561
diff
changeset
|
200 if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, evp, out_len, out) == 0) { |
12565
2e0c7f5cd8f8
util.hashes: Return OpenSSL error messages on failure
Kim Alvefur <zash@zash.se>
parents:
12564
diff
changeset
|
201 return luaL_error(L, ERR_error_string(ERR_get_error(), NULL)); |
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
|
202 } |
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
|
203 |
12562
4f4d096a14cb
util.hashes: Refactor PBKDF2 to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
12561
diff
changeset
|
204 lua_pushlstring(L, (char *)out, out_len); |
5538
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
205 |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
206 return 1; |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
207 } |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
208 |
12562
4f4d096a14cb
util.hashes: Refactor PBKDF2 to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
12561
diff
changeset
|
209 static int Lpbkdf2_sha1(lua_State *L) { |
4f4d096a14cb
util.hashes: Refactor PBKDF2 to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
12561
diff
changeset
|
210 return Levp_pbkdf2(L, EVP_sha1(), SHA_DIGEST_LENGTH); |
4f4d096a14cb
util.hashes: Refactor PBKDF2 to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
12561
diff
changeset
|
211 } |
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
|
212 |
9968
d536796a305f
util.hashes: Add PBKDF2-HMAC-SHA256
Kim Alvefur <zash@zash.se>
parents:
9967
diff
changeset
|
213 static int Lpbkdf2_sha256(lua_State *L) { |
12562
4f4d096a14cb
util.hashes: Refactor PBKDF2 to deduplicate code
Kim Alvefur <zash@zash.se>
parents:
12561
diff
changeset
|
214 return Levp_pbkdf2(L, EVP_sha256(), SHA256_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
|
215 } |
62089c9c142d
util.hashes, util.sasl.scram: Implement SCRAM-SHA1's Hi in C
Florian Zeitz <florob@babelmonkeys.de>
parents:
5537
diff
changeset
|
216 |
11541
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
217 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
|
218 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
|
219 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
|
220 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
|
221 if(len1 == len2) { |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
222 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
|
223 } else { |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
224 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
|
225 } |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
226 return 1; |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
227 } |
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
228 |
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
|
229 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
|
230 { "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
|
231 { "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
|
232 { "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
|
233 { "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
|
234 { "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
|
235 { "md5", Lmd5 }, |
12564
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
236 { "sha3_256", Lsha3_256 }, |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
237 { "sha3_512", Lsha3_512 }, |
12563
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
238 { "blake2s256", Lblake2s256 }, |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
239 { "blake2b512", Lblake2b512 }, |
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
|
240 { "hmac_sha1", Lhmac_sha1 }, |
12561
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
241 { "hmac_sha224", Lhmac_sha224 }, |
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
|
242 { "hmac_sha256", Lhmac_sha256 }, |
12561
adfb46a3e8a7
util.hashes: Expose sha224 and sha384 HMAC functions
Kim Alvefur <zash@zash.se>
parents:
12560
diff
changeset
|
243 { "hmac_sha384", Lhmac_sha384 }, |
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
|
244 { "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
|
245 { "hmac_md5", Lhmac_md5 }, |
12564
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
246 { "hmac_sha3_256", Lhmac_sha3_256 }, |
36e769c64054
util.hashes: Add SHA3 bindings
Kim Alvefur <zash@zash.se>
parents:
12563
diff
changeset
|
247 { "hmac_sha3_512", Lhmac_sha3_512 }, |
12563
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
248 { "hmac_blake2s256", Lhmac_blake2s256 }, |
d9a4e28689eb
util.hashes: Bind BLAKE2 algoritms supported by OpenSSL
Kim Alvefur <zash@zash.se>
parents:
12562
diff
changeset
|
249 { "hmac_blake2b512", Lhmac_blake2b512 }, |
9967
dc9bb31cbffe
util.hashes: Rename PBKDF2 function
Kim Alvefur <zash@zash.se>
parents:
9966
diff
changeset
|
250 { "scram_Hi_sha1", Lpbkdf2_sha1 }, /* COMPAT */ |
dc9bb31cbffe
util.hashes: Rename PBKDF2 function
Kim Alvefur <zash@zash.se>
parents:
9966
diff
changeset
|
251 { "pbkdf2_hmac_sha1", Lpbkdf2_sha1 }, |
9968
d536796a305f
util.hashes: Add PBKDF2-HMAC-SHA256
Kim Alvefur <zash@zash.se>
parents:
9967
diff
changeset
|
252 { "pbkdf2_hmac_sha256", Lpbkdf2_sha256 }, |
11541
13b84682518e
util.hashes: Add constant-time string comparison (binding to CRYPTO_memcmp)
Matthew Wild <mwild1@gmail.com>
parents:
9962
diff
changeset
|
253 { "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
|
254 { NULL, NULL } |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
255 }; |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
256 |
7889
b8d694646597
util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents:
7835
diff
changeset
|
257 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
|
258 luaL_checkversion(L); |
6411
6c8f6364bc48
util-src/*.c: Don't create globals when loaded
Kim Alvefur <zash@zash.se>
parents:
5774
diff
changeset
|
259 lua_newtable(L); |
9957
c8cfd2a5845c
util.hashes: Remove redundant semicolon
Kim Alvefur <zash@zash.se>
parents:
7889
diff
changeset
|
260 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
|
261 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
|
262 lua_setfield(L, -2, "version"); |
11562
0becc168f4f9
util.hashes: Expose OpenSSL version
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
263 #ifdef OPENSSL_VERSION |
0becc168f4f9
util.hashes: Expose OpenSSL version
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
264 lua_pushstring(L, OpenSSL_version(OPENSSL_VERSION)); |
0becc168f4f9
util.hashes: Expose OpenSSL version
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
265 lua_setfield(L, -2, "_LIBCRYPTO_VERSION"); |
0becc168f4f9
util.hashes: Expose OpenSSL version
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
266 #endif |
766
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
267 return 1; |
433a5226267f
Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents:
520
diff
changeset
|
268 } |