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