]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Add digest functions to lua.
authorChris Porter <redacted>
Sat, 26 Jan 2008 17:30:03 +0000 (17:30 +0000)
committerChris Porter <redacted>
Sat, 26 Jan 2008 17:30:03 +0000 (17:30 +0000)
lua/Makefile
lua/lua.c
lua/lua.h
lua/luacrypto.c [new file with mode: 0644]

index 445487a365612e02b4ba3f765da3a69b127a7ca9..31a84293216a6c1cfd02184d407f41d75ae877ba 100644 (file)
@@ -2,7 +2,7 @@
 .PHONY: all
 all: lua.so nterfacer_lua.so
 
-lua.so: lua.o luacommands.o luacontrol.o luabot.o lualocal.o luadebug.o luadb.o luasocket.o
+lua.so: lua.o luacommands.o luacontrol.o luabot.o lualocal.o luadebug.o luadb.o luasocket.o luacrypto.o
        ld -shared -Bdynamic -o $@ $^ ${LIBLUA} ${ADDLIB}
 
 nterfacer_lua.so: nterfacer_lua.o
index 060a19ffdef031e7ca1ef4b04721f19e27c84e6b..a7d35a083edda38fe58ae89cf87243e31f174c6e 100644 (file)
--- a/lua/lua.c
+++ b/lua/lua.c
@@ -55,6 +55,7 @@ void lua_registerlocalcommands(lua_State *ps);
 void lua_registerdebug(lua_State *ps);
 void lua_socket_closeall(lua_list *l);
 void lua_registersocketcommands(lua_State *ps);
+void lua_registercryptocommands(lua_State *ps);
 
 #ifdef LUA_DEBUGSOCKET
 
@@ -207,6 +208,7 @@ lua_State *lua_loadscript(char *file) {
   lua_registerlocalcommands(l);
   lua_registerdbcommands(l);
   lua_registersocketcommands(l);
+  lua_registercryptocommands(l);
 
   lua_setpath(l);
 
index c4c0e97ff96425a9bedc3a8c0cc0639de7f84874..b7fe7d309beb950b81ac20d36698fd382b7049d4 100644 (file)
--- a/lua/lua.h
+++ b/lua/lua.h
@@ -23,7 +23,7 @@
 
 /*** defines ************************************/
 
-#define LUA_BOTVERSION "1.83"
+#define LUA_BOTVERSION "1.84"
 #define LUA_CHANFIXBOT "Z"
 #define LUA_OPERCHAN "#twilightzone"
 
diff --git a/lua/luacrypto.c b/lua/luacrypto.c
new file mode 100644 (file)
index 0000000..9ad5ffd
--- /dev/null
@@ -0,0 +1,86 @@
+#include "lua.h"
+#include "../lib/sha1.h"
+#include "../lib/sha2.h"
+
+static int crypto_sha1(lua_State *ps) {
+  unsigned char digestbuf[20];
+  unsigned char hexbuf[sizeof(digestbuf) * 2 + 1];
+  SHA1_CTX c;
+
+  char *s = (char *)lua_tostring(ps, 1);
+  int len = lua_strlen(ps, 1);
+
+  SHA1Init(&c);
+  SHA1Update(&c, s, len);
+  SHA1Final(digestbuf, &c);
+
+  /* hah */
+  snprintf(hexbuf, sizeof(hexbuf), "%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", digestbuf[0], digestbuf[1],  digestbuf[2], digestbuf[3], digestbuf[4], digestbuf[5], digestbuf[6], digestbuf[7], digestbuf[8], digestbuf[9], digestbuf[10], digestbuf[11], digestbuf[12], digestbuf[13], digestbuf[14], digestbuf[15], digestbuf[16], digestbuf[17], digestbuf[18], digestbuf[19]);
+
+  lua_pushstring(ps, hexbuf);
+  return 1;
+}
+
+static int crypto_sha256(lua_State *ps) {
+  unsigned char digestbuf[32];
+  unsigned char hexbuf[sizeof(digestbuf) * 2 + 1];
+  SHA256_CTX c;
+
+  char *s = (char *)lua_tostring(ps, 1);
+  int len = lua_strlen(ps, 1);
+
+  SHA256_Init(&c);
+  SHA256_Update(&c, s, len);
+  SHA256_Final(digestbuf, &c);
+
+  /* hahahaha */
+  snprintf(hexbuf, sizeof(hexbuf), "%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", digestbuf[0], digestbuf[1],  digestbuf[2], digestbuf[3], digestbuf[4], digestbuf[5], digestbuf[6], digestbuf[7], digestbuf[8], digestbuf[9], digestbuf[10], digestbuf[11], digestbuf[12], digestbuf[13], digestbuf[14], digestbuf[15], digestbuf[16], digestbuf[17], digestbuf[18], digestbuf[19], digestbuf[20], digestbuf[21], digestbuf[22], digestbuf[23], digestbuf[24], digestbuf[25], digestbuf[26], digestbuf[27], digestbuf[28], digestbuf[29], digestbuf[30], digestbuf[31]);
+
+  lua_pushstring(ps, hexbuf);
+  return 1;
+}
+
+static int crypto_sha384(lua_State *ps) {
+  unsigned char digestbuf[48];
+  unsigned char hexbuf[sizeof(digestbuf) * 2 + 1];
+  SHA384_CTX c;
+
+  char *s = (char *)lua_tostring(ps, 1);
+  int len = lua_strlen(ps, 1);
+
+  SHA384_Init(&c);
+  SHA384_Update(&c, s, len);
+  SHA384_Final(digestbuf, &c);
+
+  /* hahahahahahahahaa */
+  snprintf(hexbuf, sizeof(hexbuf), "%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", digestbuf[0], digestbuf[1],  digestbuf[2], digestbuf[3], digestbuf[4], digestbuf[5], digestbuf[6], digestbuf[7], digestbuf[8], digestbuf[9], digestbuf[10], digestbuf[11], digestbuf[12], digestbuf[13], digestbuf[14], digestbuf[15], digestbuf[16], digestbuf[17], digestbuf[18], digestbuf[19], digestbuf[20], digestbuf[21], digestbuf[22], digestbuf[23], digestbuf[24], digestbuf[25], digestbuf[26], digestbuf[27], digestbuf[28], digestbuf[29], digestbuf[30], digestbuf[31],  digestbuf[32], digestbuf[33], digestbuf[34], digestbuf[35], digestbuf[36], digestbuf[37], digestbuf[38], digestbuf[39], digestbuf[40], digestbuf[41], digestbuf[42], digestbuf[43], digestbuf[44], digestbuf[45], digestbuf[46], digestbuf[47]);
+
+  lua_pushstring(ps, hexbuf);
+  return 1;
+}
+
+static int crypto_sha512(lua_State *ps) {
+  unsigned char digestbuf[64];
+  unsigned char hexbuf[sizeof(digestbuf) * 2 + 1];
+  SHA512_CTX c;
+
+  char *s = (char *)lua_tostring(ps, 1);
+  int len = lua_strlen(ps, 1);
+
+  SHA512_Init(&c);
+  SHA512_Update(&c, s, len);
+  SHA512_Final(digestbuf, &c);
+
+  /* MUHAHAHAHAHAHAHAHAHAHAAHAHAHAHAHAHHAHAHAAH */
+  snprintf(hexbuf, sizeof(hexbuf), "%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", digestbuf[0], digestbuf[1],  digestbuf[2], digestbuf[3], digestbuf[4], digestbuf[5], digestbuf[6], digestbuf[7], digestbuf[8], digestbuf[9], digestbuf[10], digestbuf[11], digestbuf[12], digestbuf[13], digestbuf[14], digestbuf[15], digestbuf[16], digestbuf[17], digestbuf[18], digestbuf[19], digestbuf[20], digestbuf[21], digestbuf[22], digestbuf[23], digestbuf[24], digestbuf[25], digestbuf[26], digestbuf[27], digestbuf[28], digestbuf[29], digestbuf[30], digestbuf[31],  digestbuf[32], digestbuf[33], digestbuf[34], digestbuf[35], digestbuf[36], digestbuf[37], digestbuf[38], digestbuf[39], digestbuf[40], digestbuf[41], digestbuf[42], digestbuf[43], digestbuf[44], digestbuf[45], digestbuf[46], digestbuf[47], digestbuf[48], digestbuf[49], digestbuf[50], digestbuf[51], digestbuf[52], digestbuf[53], digestbuf[54], digestbuf[55], digestbuf[56], digestbuf[57], digestbuf[58], digestbuf[59], digestbuf[60], digestbuf[61], digestbuf[62], digestbuf[63]);
+
+  lua_pushstring(ps, hexbuf);
+  return 1;
+}
+
+void lua_registercryptocommands(lua_State *l) {
+  lua_register(l, "crypto_sha1", crypto_sha1);
+  lua_register(l, "crypto_sha256", crypto_sha256);
+  lua_register(l, "crypto_sha384", crypto_sha384);
+  lua_register(l, "crypto_sha512", crypto_sha512);
+}