Update tag value for tizen 2.0 build
[external/libidn.git] / lib / profiles.c
1 /* profiles.c --- Definitions of stringprep profiles.
2  * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon Josefsson
3  *
4  * This file is part of GNU Libidn.
5  *
6  * GNU Libidn is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * GNU Libidn is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with GNU Libidn; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19  *
20  */
21
22 #include <config.h>
23 #include "stringprep.h"
24
25 const Stringprep_profiles stringprep_profiles[] = {
26   {"Nameprep", stringprep_nameprep},
27   {"KRBprep", stringprep_kerberos5},    /* Deprecate? */
28   {"Nodeprep", stringprep_xmpp_nodeprep},
29   {"Resourceprep", stringprep_xmpp_resourceprep},
30   {"plain", stringprep_plain},  /* sasl-anon-00. */
31   {"trace", stringprep_trace},  /* sasl-anon-01,02,03. */
32   {"SASLprep", stringprep_saslprep},
33   {"ISCSIprep", stringprep_iscsi},      /* Obsolete. */
34   {"iSCSI", stringprep_iscsi},  /* IANA. */
35   {NULL, NULL}
36 };
37
38 const Stringprep_profile stringprep_nameprep[] = {
39   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
40   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_2},
41   {STRINGPREP_NFKC, 0, 0},
42   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
43   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
44   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
45   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
46   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
47   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
48   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
49   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
50   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
51   {STRINGPREP_BIDI, 0, 0},
52   {STRINGPREP_BIDI_PROHIBIT_TABLE, ~STRINGPREP_NO_BIDI,
53    stringprep_rfc3454_C_8},
54   {STRINGPREP_BIDI_RAL_TABLE, 0, stringprep_rfc3454_D_1},
55   {STRINGPREP_BIDI_L_TABLE, 0, stringprep_rfc3454_D_2},
56   {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
57    stringprep_rfc3454_A_1},
58   {0}
59 };
60
61 const Stringprep_profile stringprep_kerberos5[] = {
62   /* XXX this is likely to be wrong as the specification is
63      a rough draft. */
64   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
65   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_3},
66   {STRINGPREP_NFKC, 0, 0},
67   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
68   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
69   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
70   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
71   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
72   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
73   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
74   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
75   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
76   {STRINGPREP_BIDI, 0, 0},
77   {STRINGPREP_BIDI_PROHIBIT_TABLE, ~STRINGPREP_NO_BIDI,
78    stringprep_rfc3454_C_8},
79   {STRINGPREP_BIDI_RAL_TABLE, 0, stringprep_rfc3454_D_1},
80   {STRINGPREP_BIDI_L_TABLE, 0, stringprep_rfc3454_D_2},
81   {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
82    stringprep_rfc3454_A_1},
83   {0}
84 };
85
86 const Stringprep_table_element stringprep_xmpp_nodeprep_prohibit[] = {
87   {0x000022},                   /* #x22 (") */
88   {0x000026},                   /* #x26 (&) */
89   {0x000027},                   /* #x27 (') */
90   {0x00002F},                   /* #x2F (/) */
91   {0x00003A},                   /* #x3A (:) */
92   {0x00003C},                   /* #x3C (<) */
93   {0x00003E},                   /* #x3E (>) */
94   {0x000040},                   /* #x40 (@) */
95   {0}
96 };
97
98 const Stringprep_profile stringprep_xmpp_nodeprep[] = {
99   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
100   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_2},
101   {STRINGPREP_NFKC, 0, 0},
102   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_1},
103   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
104   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
105   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
106   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
107   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
108   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
109   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
110   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
111   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
112   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
113   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_xmpp_nodeprep_prohibit},
114   {STRINGPREP_BIDI, 0, 0},
115   {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
116   {STRINGPREP_BIDI_RAL_TABLE, 0, stringprep_rfc3454_D_1},
117   {STRINGPREP_BIDI_L_TABLE, 0, stringprep_rfc3454_D_2},
118   {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
119    stringprep_rfc3454_A_1},
120   {0}
121 };
122
123 const Stringprep_profile stringprep_xmpp_resourceprep[] = {
124   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
125   {STRINGPREP_NFKC, 0, 0},
126   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
127   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
128   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
129   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
130   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
131   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
132   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
133   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
134   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
135   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
136   {STRINGPREP_BIDI, 0, 0},
137   {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
138   {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
139   {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
140   {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
141    stringprep_rfc3454_A_1},
142   {0}
143 };
144
145 const Stringprep_profile stringprep_plain[] = {
146   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
147   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
148   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
149   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
150   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
151   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
152   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
153   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
154   {STRINGPREP_BIDI, 0, 0},
155   {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
156   {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
157   {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
158   {0}
159 };
160
161 const Stringprep_profile stringprep_trace[] = {
162   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
163   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
164   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
165   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
166   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
167   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
168   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
169   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
170   {STRINGPREP_BIDI, 0, 0},
171   {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
172   {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
173   {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
174   {0}
175 };
176
177 const Stringprep_table_element stringprep_iscsi_prohibit[] = {
178   /* NB, since start == 0, we must have that end != 0 for the
179      end-of-table logic to work. */
180   {0x0000, 1},                  /* [ASCII CONTROL CHARACTERS and SPACE through ,] */
181   {0x0001},
182   {0x0002},
183   {0x0003},
184   {0x0004},
185   {0x0005},
186   {0x0006},
187   {0x0007},
188   {0x0008},
189   {0x0009},
190   {0x000A},
191   {0x000B},
192   {0x000C},
193   {0x000D},
194   {0x000E},
195   {0x000F},
196   {0x0010},
197   {0x0011},
198   {0x0012},
199   {0x0013},
200   {0x0014},
201   {0x0015},
202   {0x0016},
203   {0x0017},
204   {0x0018},
205   {0x0019},
206   {0x001A},
207   {0x001B},
208   {0x001C},
209   {0x001D},
210   {0x001E},
211   {0x001F},
212   {0x0020},
213   {0x0021},
214   {0x0022},
215   {0x0023},
216   {0x0024},
217   {0x0025},
218   {0x0026},
219   {0x0027},
220   {0x0028},
221   {0x0029},
222   {0x002A},
223   {0x002B},
224   {0x002C},
225   {0x002F},                     /* [ASCII /] */
226   {0x003B},                     /* [ASCII ; through @] */
227   {0x003C},
228   {0x003D},
229   {0x003E},
230   {0x003F},
231   {0x0040},
232   {0x005B},                     /* [ASCII [ through `] */
233   {0x005C},
234   {0x005D},
235   {0x005E},
236   {0x005F},
237   {0x0060},
238   {0x007B},                     /* [ASCII { through DEL] */
239   {0x007C},
240   {0x007D},
241   {0x007E},
242   {0x007F},
243   {0x3002},                     /* ideographic full stop */
244   {0}
245 };
246
247 const Stringprep_profile stringprep_iscsi[] = {
248   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
249   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_2},
250   {STRINGPREP_NFKC, 0, 0},
251   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_1},
252   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
253   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
254   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
255   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
256   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
257   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
258   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
259   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
260   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
261   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
262   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_iscsi_prohibit},
263   {STRINGPREP_BIDI, 0, 0},
264   {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
265   {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
266   {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
267   {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
268    stringprep_rfc3454_A_1},
269   {0}
270 };
271
272 const Stringprep_table_element stringprep_saslprep_space_map[] = {
273   {0x0000A0, 0, {0x0020}},      /* 00A0; NO-BREAK SPACE */
274   {0x001680, 0, {0x0020}},      /* 1680; OGHAM SPACE MARK */
275   {0x002000, 0, {0x0020}},      /* 2000; EN QUAD */
276   {0x002001, 0, {0x0020}},      /* 2001; EM QUAD */
277   {0x002002, 0, {0x0020}},      /* 2002; EN SPACE */
278   {0x002003, 0, {0x0020}},      /* 2003; EM SPACE */
279   {0x002004, 0, {0x0020}},      /* 2004; THREE-PER-EM SPACE */
280   {0x002005, 0, {0x0020}},      /* 2005; FOUR-PER-EM SPACE */
281   {0x002006, 0, {0x0020}},      /* 2006; SIX-PER-EM SPACE */
282   {0x002007, 0, {0x0020}},      /* 2007; FIGURE SPACE */
283   {0x002008, 0, {0x0020}},      /* 2008; PUNCTUATION SPACE */
284   {0x002009, 0, {0x0020}},      /* 2009; THIN SPACE */
285   {0x00200A, 0, {0x0020}},      /* 200A; HAIR SPACE */
286   {0x00200B, 0, {0x0020}},      /* 200B; ZERO WIDTH SPACE */
287   {0x00202F, 0, {0x0020}},      /* 202F; NARROW NO-BREAK SPACE */
288   {0x00205F, 0, {0x0020}},      /* 205F; MEDIUM MATHEMATICAL SPACE */
289   {0x003000, 0, {0x0020}},      /* 3000; IDEOGRAPHIC SPACE */
290   {0}
291 };
292
293 const Stringprep_profile stringprep_saslprep[] = {
294   {STRINGPREP_MAP_TABLE, 0, stringprep_saslprep_space_map},
295   {STRINGPREP_MAP_TABLE, 0, stringprep_rfc3454_B_1},
296   {STRINGPREP_NFKC, 0, 0},
297   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_1_2},
298   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_1},
299   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_2_2},
300   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_3},
301   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_4},
302   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_5},
303   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_6},
304   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_7},
305   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
306   {STRINGPREP_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_9},
307   {STRINGPREP_BIDI, 0, 0},
308   {STRINGPREP_BIDI_PROHIBIT_TABLE, 0, stringprep_rfc3454_C_8},
309   {STRINGPREP_BIDI_RAL_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_1},
310   {STRINGPREP_BIDI_L_TABLE, ~STRINGPREP_NO_BIDI, stringprep_rfc3454_D_2},
311   {STRINGPREP_UNASSIGNED_TABLE, ~STRINGPREP_NO_UNASSIGNED,
312    stringprep_rfc3454_A_1},
313   {0}
314 };