[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [idn] I-D ACTION:draft-ietf-idn-idna-08.txt




	Below is the wire to presentation table from RFC 1034 / 1035
	for label octets.  BIND also escapses '"' but that is not
	strictly required.

     00 \000  01 \001  02 \002  03 \003  04 \004  05 \005  06 \006  07 \007
     08 \008  09 \009  0a \010  0b \011  0c \012  0d \013  0e \014  0f \015
     10 \016  11 \017  12 \018  13 \019  14 \020  15 \021  16 \022  17 \023
     18 \024  19 \025  1a \026  1b \027  1c \028  1d \029  1e \030  1f \031
     20 \032  21  !    22  "    23  #    24 \$    25  %    26  &    27  '
     28 \(    29 \)    2a  *    2b  +    2c  ,    2d  -    2e  \.    2f /
     30  0    31  1    32  2    33  3    34  4    35  5    36  6    37  7
     38  8    39  9    3a  :    3b  \;   3c  <    3d  =    3e  >    3f  ?
     40 \@    41  A    42  B    43  C    44  D    45  E    46  F    47  G
     48  H    49  I    4a  J    4b  K    4c  L    4d  M    4e  N    4f  O
     50  P    51  Q    52  R    53  S    54  T    55  U    56  V    57  W
     58  X    59  Y    5a  Z    5b  [    5c \\    5d  ]    5e  ^    5f  _
     60  `    61  a    62  b    63  c    64  d    65  e    66  f    67  g
     68  h    69  i    6a  j    6b  k    6c  l    6d  m    6e  n    6f  o
     70  p    71  q    72  r    73  s    74  t    75  u    76  v    77  w
     78  x    79  y    7a  z    7b  {    7c  |    7d  }    7e  ~    7f \127
     80 \128  81 \129  82 \130  83 \131  84 \132  85 \133  86 \134  87 \135
     88 \136  89 \137  8a \138  8b \139  8c \140  8d \141  8e \142  8f \143
     90 \144  91 \145  92 \146  93 \147  94 \148  95 \149  96 \150  97 \151
     98 \152  99 \153  9a \154  9b \155  9c \156  9d \157  9e \158  9f \159
     a0 \160  a1 \161  a2 \162  a3 \163  a4 \164  a5 \165  a6 \166  a7 \167
     a8 \168  a9 \169  aa \170  ab \171  ac \172  ad \173  ae \174  af \175
     b0 \176  b1 \177  b2 \178  b3 \179  b4 \180  b5 \181  b6 \182  b7 \183
     b8 \184  b9 \185  ba \186  bb \187  bc \188  bd \189  be \190  bf \191
     c0 \192  c1 \193  c2 \194  c3 \195  c4 \196  c5 \197  c6 \198  c7 \199
     c8 \200  c9 \201  ca \202  cb \203  cc \204  cd \205  ce \206  cf \207
     d0 \208  d1 \209  d2 \210  d3 \211  d4 \212  d5 \213  d6 \214  d7 \215
     d8 \216  d9 \217  da \218  db \219  dc \220  dd \221  de \222  df \223
     e0 \224  e1 \225  e2 \226  e3 \227  e4 \228  e5 \229  e6 \230  e7 \231
     e8 \232  e9 \233  ea \234  eb \235  ec \236  ed \237  ee \238  ef \239
     f0 \240  f1 \241  f2 \242  f3 \243  f4 \244  f5 \245  f6 \246  f7 \247
     f8 \248  f9 \249  fa \250  fb \251  fc \252  fd \253  fe \254  ff \255

	Below is the table use to compare label octets in wire form by
	indexing into the table and then comparing the resulting mappings.
	As it maps to "lowercase" it is also the DNSSEC mapping table.

	two labels are equal if there lengths are equal and
	there mapped values are equal.

	e.g.
		/* compare uncompressed label */
	int
	equal(unsigned char *l1, unsigned char *l2) {
		int i;
		/* uncompressed labels? */
		INSIST(*l1 <= 63 && *l2 <= 63); /* caller is broken */
		if (*l1 != *l2)
			return (0);
		for (i = 1; i <= l1[0]; i++)
			if (dnssec[l1[i]] != dnssec[l2[i]])
				return(0);
		return (1);
	}

char dnssec[] = {
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
        0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
        0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
        0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
        0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
        0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
        0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
        0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
        0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
        0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
        0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
        0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
        0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
        0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
        0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
        0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
        0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
        0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
        0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
        0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
        0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
        0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
        0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
        0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
        0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
        0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
        0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
        0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
        0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
        0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
        0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
        0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
};

	Whether you like the wording of RFC 1034/1035
	the real world implements RFC 1034/1035 this way.

	Mark

--
Mark Andrews, Internet Software Consortium
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742                 INTERNET: Mark.Andrews@isc.org