1
4
5# include "luametatex.h"
6
7# include <utilsha.h>
8
9# define SHA256_RESULT_LENGTH (SHA256_STRING_LENGTH-1)
10# define SHA384_RESULT_LENGTH (SHA384_STRING_LENGTH-1)
11# define SHA512_RESULT_LENGTH (SHA512_STRING_LENGTH-1)
12
13# define sha2_body(SHA_DIGEST_LENGTH, SHA_CALCULATE, CONVERSION, SHA_RESULT_LENGTH) do { \
14 if (lua_type(L, 1) == LUA_TSTRING) { \
15 uint8_t result[SHA_DIGEST_LENGTH]; \
16 size_t size = 0; \
17 const char *data = lua_tolstring(L, 1, &size); \
18 SHA_CALCULATE(data, size, result, CONVERSION); \
19 lua_pushlstring(L, (const char *) result, SHA_RESULT_LENGTH); \
20 return 1; \
21 } \
22 return 0; \
23} while (0)
24
25static int sha2lib_256_sum(lua_State *L) { sha2_body(SHA256_DIGEST_LENGTH, sha256_digest, SHA_BYTES, SHA256_DIGEST_LENGTH); }
26static int sha2lib_384_sum(lua_State *L) { sha2_body(SHA384_DIGEST_LENGTH, sha384_digest, SHA_BYTES, SHA384_DIGEST_LENGTH); }
27static int sha2lib_512_sum(lua_State *L) { sha2_body(SHA512_DIGEST_LENGTH, sha512_digest, SHA_BYTES, SHA512_DIGEST_LENGTH); }
28static int sha2lib_256_hex(lua_State *L) { sha2_body(SHA256_STRING_LENGTH, sha256_digest, SHA_LCHEX, SHA256_RESULT_LENGTH); }
29static int sha2lib_384_hex(lua_State *L) { sha2_body(SHA384_STRING_LENGTH, sha384_digest, SHA_LCHEX, SHA384_RESULT_LENGTH); }
30static int sha2lib_512_hex(lua_State *L) { sha2_body(SHA512_STRING_LENGTH, sha512_digest, SHA_LCHEX, SHA512_RESULT_LENGTH); }
31static int sha2lib_256_HEX(lua_State *L) { sha2_body(SHA256_STRING_LENGTH, sha256_digest, SHA_UCHEX, SHA256_RESULT_LENGTH); }
32static int sha2lib_384_HEX(lua_State *L) { sha2_body(SHA384_STRING_LENGTH, sha384_digest, SHA_UCHEX, SHA384_RESULT_LENGTH); }
33static int sha2lib_512_HEX(lua_State *L) { sha2_body(SHA512_STRING_LENGTH, sha512_digest, SHA_UCHEX, SHA512_RESULT_LENGTH); }
34
35static struct luaL_Reg sha2lib_function_list[] = {
36
37 { "digest256", sha2lib_256_sum },
38 { "digest384", sha2lib_384_sum },
39 { "digest512", sha2lib_512_sum },
40
41 { "sum256", sha2lib_256_sum },
42 { "sum384", sha2lib_384_sum },
43 { "sum512", sha2lib_512_sum },
44 { "hex256", sha2lib_256_hex },
45 { "hex384", sha2lib_384_hex },
46 { "hex512", sha2lib_512_hex },
47 { "HEX256", sha2lib_256_HEX },
48 { "HEX384", sha2lib_384_HEX },
49 { "HEX512", sha2lib_512_HEX },
50 { NULL, NULL },
51};
52
53int luaopen_sha2(lua_State *L) {
54 lua_newtable(L);
55 luaL_setfuncs(L, sha2lib_function_list, 0);
56 return 1;
57}
58 |