util-src/encodings.c

Mon, 08 Dec 2008 03:19:11 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Mon, 08 Dec 2008 03:19:11 +0500
changeset 601
6cb908ef01c8
parent 520
e96ac4bb6dd8
child 766
433a5226267f
permissions
-rw-r--r--

Fixed util.encodings.base64.decode to not truncate results when encountering an '=' before the end of the given input.

520
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
1 /* Prosody IM v0.1
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
2 -- Copyright (C) 2008 Matthew Wild
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
3 -- Copyright (C) 2008 Waqas Hussain
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
4 --
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
5 -- This program is free software; you can redistribute it and/or
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
6 -- modify it under the terms of the GNU General Public License
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
7 -- as published by the Free Software Foundation; either version 2
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
8 -- of the License, or (at your option) any later version.
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
9 --
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
10 -- This program is distributed in the hope that it will be useful,
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
13 -- GNU General Public License for more details.
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
14 --
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
15 -- You should have received a copy of the GNU General Public License
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
16 -- along with this program; if not, write to the Free Software
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
17 -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
18 */
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
19
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
20
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
21 /*
417
d60e63379284 Removed commented code
Waqas Hussain <waqas20@gmail.com>
parents: 415
diff changeset
22 * encodings.c
d60e63379284 Removed commented code
Waqas Hussain <waqas20@gmail.com>
parents: 415
diff changeset
23 * Lua library for base64, stringprep and idna encodings
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
24 */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
25
441
4089b62b510c Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents: 432
diff changeset
26 // Newer MSVC compilers deprecate strcpy as unsafe, but we use it in a safe way
4089b62b510c Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents: 432
diff changeset
27 #define _CRT_SECURE_NO_DEPRECATE
4089b62b510c Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents: 432
diff changeset
28
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
29 #include <string.h>
473
22b0e654c4cf To use free you should include stdlib.h rather than malloc.h according to man page of free() and various C reference websites.
Tobias Markmann <tm@ayena.de>
parents: 441
diff changeset
30 #include <stdlib.h>
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
31
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
32 #include "lua.h"
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
33 #include "lauxlib.h"
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
34
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
35 /***************** BASE64 *****************/
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
36
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
37 static const char code[]=
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
38 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
39
474
666e22848890 Use unsigned int instead of uint because uint is already in use on OS X.
Tobias Markmann <tm@ayena.de>
parents: 473
diff changeset
40 static void base64_encode(luaL_Buffer *b, unsigned int c1, unsigned int c2, unsigned int c3, int n)
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
41 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
42 unsigned long tuple=c3+256UL*(c2+256UL*c1);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
43 int i;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
44 char s[4];
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
45 for (i=0; i<4; i++) {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
46 s[3-i] = code[tuple % 64];
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
47 tuple /= 64;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
48 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
49 for (i=n+1; i<4; i++) s[i]='=';
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
50 luaL_addlstring(b,s,4);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
51 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
52
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
53 static int Lbase64_encode(lua_State *L) /** encode(s) */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
54 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
55 size_t l;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
56 const unsigned char *s=(const unsigned char*)luaL_checklstring(L,1,&l);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
57 luaL_Buffer b;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
58 int n;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
59 luaL_buffinit(L,&b);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
60 for (n=l/3; n--; s+=3) base64_encode(&b,s[0],s[1],s[2],3);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
61 switch (l%3)
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
62 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
63 case 1: base64_encode(&b,s[0],0,0,1); break;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
64 case 2: base64_encode(&b,s[0],s[1],0,2); break;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
65 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
66 luaL_pushresult(&b);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
67 return 1;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
68 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
69
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
70 static void base64_decode(luaL_Buffer *b, int c1, int c2, int c3, int c4, int n)
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
71 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
72 unsigned long tuple=c4+64L*(c3+64L*(c2+64L*c1));
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
73 char s[3];
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
74 switch (--n)
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
75 {
441
4089b62b510c Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents: 432
diff changeset
76 case 3: s[2]=(char) tuple;
4089b62b510c Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents: 432
diff changeset
77 case 2: s[1]=(char) (tuple >> 8);
4089b62b510c Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents: 432
diff changeset
78 case 1: s[0]=(char) (tuple >> 16);
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
79 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
80 luaL_addlstring(b,s,n);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
81 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
82
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
83 static int Lbase64_decode(lua_State *L) /** decode(s) */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
84 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
85 size_t l;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
86 const char *s=luaL_checklstring(L,1,&l);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
87 luaL_Buffer b;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
88 int n=0;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
89 char t[4];
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
90 luaL_buffinit(L,&b);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
91 for (;;)
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
92 {
601
6cb908ef01c8 Fixed util.encodings.base64.decode to not truncate results when encountering an '=' before the end of the given input.
Waqas Hussain <waqas20@gmail.com>
parents: 520
diff changeset
93 int c=*s++;
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
94 switch (c)
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
95 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
96 const char *p;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
97 default:
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
98 p=strchr(code,c); if (p==NULL) return 0;
441
4089b62b510c Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents: 432
diff changeset
99 t[n++]= (char) (p-code);
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
100 if (n==4)
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
101 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
102 base64_decode(&b,t[0],t[1],t[2],t[3],4);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
103 n=0;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
104 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
105 break;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
106 case '=':
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
107 switch (n)
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
108 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
109 case 1: base64_decode(&b,t[0],0,0,0,1); break;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
110 case 2: base64_decode(&b,t[0],t[1],0,0,2); break;
601
6cb908ef01c8 Fixed util.encodings.base64.decode to not truncate results when encountering an '=' before the end of the given input.
Waqas Hussain <waqas20@gmail.com>
parents: 520
diff changeset
111 case 3: base64_decode(&b,t[0],t[1],t[2],0,3); break;
6cb908ef01c8 Fixed util.encodings.base64.decode to not truncate results when encountering an '=' before the end of the given input.
Waqas Hussain <waqas20@gmail.com>
parents: 520
diff changeset
112 }
6cb908ef01c8 Fixed util.encodings.base64.decode to not truncate results when encountering an '=' before the end of the given input.
Waqas Hussain <waqas20@gmail.com>
parents: 520
diff changeset
113 n=0;
6cb908ef01c8 Fixed util.encodings.base64.decode to not truncate results when encountering an '=' before the end of the given input.
Waqas Hussain <waqas20@gmail.com>
parents: 520
diff changeset
114 break;
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
115 case 0:
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
116 luaL_pushresult(&b);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
117 return 1;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
118 case '\n': case '\r': case '\t': case ' ': case '\f': case '\b':
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
119 break;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
120 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
121 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
122 return 0;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
123 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
124
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
125 static const luaL_Reg Reg_base64[] =
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
126 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
127 { "encode", Lbase64_encode },
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
128 { "decode", Lbase64_decode },
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
129 { NULL, NULL }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
130 };
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
131
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
132 /***************** STRINGPREP *****************/
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
133
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
134 #include <stringprep.h>
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
135
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
136 static int stringprep_prep(lua_State *L, const Stringprep_profile *profile)
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
137 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
138 size_t len;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
139 const char *s = luaL_checklstring(L, 1, &len);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
140 char string[1024];
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
141 int ret;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
142 if (len >= 1024) {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
143 lua_pushnil(L);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
144 return 1; // TODO return error message
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
145 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
146 strcpy(string, s);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
147 ret = stringprep(string, 1024, 0, profile);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
148 if (ret == STRINGPREP_OK) {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
149 lua_pushstring(L, string);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
150 return 1;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
151 } else {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
152 lua_pushnil(L);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
153 return 1; // TODO return error message
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
154 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
155 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
156
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
157 #define MAKE_PREP_FUNC(myFunc, prep) \
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
158 static int myFunc(lua_State *L) { return stringprep_prep(L, prep); }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
159
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
160 MAKE_PREP_FUNC(Lstringprep_nameprep, stringprep_nameprep) /** stringprep.nameprep(s) */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
161 MAKE_PREP_FUNC(Lstringprep_nodeprep, stringprep_xmpp_nodeprep) /** stringprep.nodeprep(s) */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
162 MAKE_PREP_FUNC(Lstringprep_resourceprep, stringprep_xmpp_resourceprep) /** stringprep.resourceprep(s) */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
163 MAKE_PREP_FUNC(Lstringprep_saslprep, stringprep_saslprep) /** stringprep.saslprep(s) */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
164
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
165 static const luaL_Reg Reg_stringprep[] =
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
166 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
167 { "nameprep", Lstringprep_nameprep },
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
168 { "nodeprep", Lstringprep_nodeprep },
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
169 { "resourceprep", Lstringprep_resourceprep },
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
170 { "saslprep", Lstringprep_saslprep },
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
171 { NULL, NULL }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
172 };
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
173
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
174 /***************** IDNA *****************/
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
175
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
176 #include <idna.h>
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
177
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
178 static int Lidna_to_ascii(lua_State *L) /** idna.to_ascii(s) */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
179 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
180 size_t len;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
181 const char *s = luaL_checklstring(L, 1, &len);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
182 char* output = NULL;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
183 int ret = idna_to_ascii_8z(s, &output, 0);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
184 if (ret == IDNA_SUCCESS) {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
185 lua_pushstring(L, output);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
186 if (output) free(output);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
187 return 1;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
188 } else {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
189 lua_pushnil(L);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
190 if (output) free(output);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
191 return 1; // TODO return error message
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
192 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
193 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
194
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
195 static int Lidna_to_unicode(lua_State *L) /** idna.to_unicode(s) */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
196 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
197 size_t len;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
198 const char *s = luaL_checklstring(L, 1, &len);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
199 char* output = NULL;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
200 int ret = idna_to_unicode_8z8z(s, &output, 0);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
201 if (ret == IDNA_SUCCESS) {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
202 lua_pushstring(L, output);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
203 if (output) free(output);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
204 return 1;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
205 } else {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
206 lua_pushnil(L);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
207 if (output) free(output);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
208 return 1; // TODO return error message
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
209 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
210 }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
211
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
212 static const luaL_Reg Reg_idna[] =
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
213 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
214 { "to_ascii", Lidna_to_ascii },
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
215 { "to_unicode", Lidna_to_unicode },
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
216 { NULL, NULL }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
217 };
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
218
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
219 /***************** end *****************/
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
220
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
221 static const luaL_Reg Reg[] =
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
222 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
223 { NULL, NULL }
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
224 };
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
225
432
fb19a5c14d44 Fix for hashes.c and encodings.c to rename luaopen for util_*
Matthew Wild <mwild1@gmail.com>
parents: 417
diff changeset
226 LUALIB_API int luaopen_util_encodings(lua_State *L)
415
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
227 {
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
228 luaL_register(L, "encodings", Reg);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
229
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
230 lua_pushliteral(L, "base64");
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
231 lua_newtable(L);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
232 luaL_register(L, NULL, Reg_base64);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
233 lua_settable(L,-3);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
234
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
235 lua_pushliteral(L, "stringprep");
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
236 lua_newtable(L);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
237 luaL_register(L, NULL, Reg_stringprep);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
238 lua_settable(L,-3);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
239
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
240 lua_pushliteral(L, "idna");
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
241 lua_newtable(L);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
242 luaL_register(L, NULL, Reg_idna);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
243 lua_settable(L,-3);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
244
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
245 lua_pushliteral(L, "version"); /** version */
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
246 lua_pushliteral(L, "-3.14");
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
247 lua_settable(L,-3);
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
248 return 1;
3cf7deea9971 Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
249 }

mercurial