annotate moonbridge_websocket.c @ 141:845e3dce3774
Fixed wrong treatment of Lua string buffer in drain mode
author |
jbe |
date |
Fri May 01 04:05:31 2015 +0200 (2015-05-01) |
parents |
f148bd2b3d05 |
children |
|
rev |
line source |
jbe@139
|
1
|
jbe@139
|
2 #include <lua.h>
|
jbe@139
|
3 #include <lauxlib.h>
|
jbe@139
|
4 #include <lualib.h>
|
jbe@139
|
5
|
jbe@139
|
6 #include <sys/types.h>
|
jbe@139
|
7 #include <sha.h>
|
jbe@139
|
8
|
jbe@139
|
9 static int moonbr_ws_hsresp(lua_State *L) {
|
jbe@139
|
10 const char *challenge;
|
jbe@139
|
11 size_t challenge_len;
|
jbe@139
|
12 SHA_CTX context;
|
jbe@139
|
13 char digest[20];
|
jbe@139
|
14 static const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
jbe@139
|
15 char digest64[28];
|
jbe@139
|
16 int i, j;
|
jbe@139
|
17 int s = 0, b = 0;
|
jbe@139
|
18 challenge = luaL_checklstring(L, 1, &challenge_len);
|
jbe@139
|
19 SHA1_Init(&context);
|
jbe@139
|
20 SHA1_Update(&context, challenge, challenge_len);
|
jbe@139
|
21 SHA1_Update(&context, "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", 36);
|
jbe@139
|
22 SHA1_Final((unsigned char *)digest, &context);
|
jbe@139
|
23 for (i=0, j=0; i<20; i++) {
|
jbe@139
|
24 b = (b << 8) + (unsigned char)digest[i];
|
jbe@139
|
25 s += 8;
|
jbe@139
|
26 while (s >= 6) {
|
jbe@139
|
27 s -= 6;
|
jbe@139
|
28 digest64[j++] = alphabet[b >> s];
|
jbe@139
|
29 b &= (1<<s)-1;
|
jbe@139
|
30 }
|
jbe@139
|
31 }
|
jbe@139
|
32 digest64[26] = alphabet[b << 2];
|
jbe@139
|
33 digest64[27] = '=';
|
jbe@139
|
34 lua_pushlstring(L, digest64, 28);
|
jbe@139
|
35 return 1;
|
jbe@139
|
36 }
|
jbe@139
|
37
|
jbe@139
|
38 static const struct luaL_Reg moonbr_ws_module_funcs[] = {
|
jbe@139
|
39 {"hsresp", moonbr_ws_hsresp},
|
jbe@139
|
40 {NULL, NULL}
|
jbe@139
|
41 };
|
jbe@139
|
42
|
jbe@139
|
43 int luaopen_moonbridge_websocket(lua_State *L) {
|
jbe@139
|
44 lua_newtable(L); // module
|
jbe@139
|
45 luaL_setfuncs(L, moonbr_ws_module_funcs, 0);
|
jbe@139
|
46 return 1;
|
jbe@139
|
47
|
jbe@139
|
48 }
|
jbe@139
|
49
|