updated drafts

This commit is contained in:
Andreas Gustafsson 2000-11-29 19:15:51 +00:00
parent 21a170a0ce
commit 2321342255
3 changed files with 267 additions and 205 deletions

View file

@ -1,7 +1,12 @@
INTERNET-DRAFT David Conrad
draft-ietf-dnsext-dnssec-okbit-00.txt Nominum Inc.
August, 2000
draft-ietf-dnsext-dnssec-okbit-01.txt Nominum Inc.
November, 2000
Indicating Resolver Support of DNSSEC
@ -30,11 +35,11 @@ Status of this Memo
Abstract
In order to deploy DNSSEC operationally, DNSSEC aware servers should
only respond with DNSSEC RRs when there is an explicit indication
that the resolver can understand those RRs. This document proposes
the use of a bit in the EDNS0 header to provide that explicit
indication and the necessary protocol changes to implement that
notification.
only perform automatic inclusion of DNSSEC RRs when there is an
explicit indication that the resolver can understand those RRs. This
document proposes the use of a bit in the EDNS0 header to provide
that explicit indication and the necessary protocol changes to
implement that notification.
1. Introduction
@ -50,9 +55,9 @@ Abstract
Expires February, 2001 [Page 1]
Expires May, 2001 [Page 1]
draft-ietf-dnsext-dnssec-okbit-00.txt August, 2000
draft-ietf-dnsext-dnssec-okbit-01.txt November, 2000
This document discusses a method to avoid these negative impacts,
@ -106,9 +111,9 @@ draft-ietf-dnsext-dnssec-okbit-00.txt August, 2000
Expires February, 2001 [Page 2]
Expires May, 2001 [Page 2]
draft-ietf-dnsext-dnssec-okbit-00.txt August, 2000
draft-ietf-dnsext-dnssec-okbit-01.txt November, 2000
non-compliant caching or forwarding servers inappropriately copy data
@ -143,39 +148,30 @@ draft-ietf-dnsext-dnssec-okbit-00.txt August, 2000
security RRs and those RRs MUST NOT be returned in the response
(unless DNSSEC security RRs are explicitly queried for).
More explicitly, in order to explicitly indicate DNSSEC security RRs
are acceptible to the resolver, DNSSEC-aware nameservers (both BASIC
and FULL according to [RFC2535] definitions) MUST NOT add DNSSEC
security RRs to any section of a response unless at least one of the
following is true:
More explicitly, DNSSEC-aware nameservers MUST NOT insert SIG, KEY,
or NXT RRs to authenticate a response as specified in [RFC2535]
unless the DO bit was set on the request. Security records that match
an explicit SIG, KEY, NXT, or ANY query, or are part of the zone data
for an AXFR or IXFR query, are included whether or not the DO bit was
set.
1) The DO bit of the query EDNS0 header was set on the request,
indicating that the client would like DNSSEC security RRs.
2) The query type is SIG, KEY, or NXT and the RRs added match the
query name and query type.
In case 1), response generation is as indicated in [RFC2535].
In case 2), only those RRs which match the query name and query type
are added.
Expires February, 2001 [Page 3]
draft-ietf-dnsext-dnssec-okbit-00.txt August, 2000
Recursive DNSSEC-aware server MUST set the DO bit on recursive
A recursive DNSSEC-aware server MUST set the DO bit on recursive
requests, regardless of the status of the DO bit on the initiating
resolver request. If the initiating resolver request does not have
the DO bit set, the recursive DNSSEC-aware server MUST remove DNSSEC
security RRs before returning the data to the client, however cached
data MUST NOT be modified.
In the event a server returns a NOTIMPL, FORMERR or SERVFAIL response
In the event a server returns a NOTIMP, FORMERR or SERVFAIL response
to a query that has the DO bit set, the resolver SHOULD NOT expect
Expires May, 2001 [Page 3]
draft-ietf-dnsext-dnssec-okbit-01.txt November, 2000
DNSSEC security RRs and SHOULD retry the query without the EDNS0 in
accordance with section 5.3 of [RFC2671].
@ -216,13 +212,6 @@ References
Author's Address
Expires February, 2001 [Page 4]
draft-ietf-dnsext-dnssec-okbit-00.txt August, 2000
David Conrad
Nominum Inc.
950 Charter Street
@ -231,6 +220,14 @@ draft-ietf-dnsext-dnssec-okbit-00.txt August, 2000
Phone: +1 650 779 6003
Expires May, 2001 [Page 4]
draft-ietf-dnsext-dnssec-okbit-01.txt November, 2000
Email: david.conrad@nominum.com
@ -274,5 +271,13 @@ Full Copyright Statement
Expires February, 2001 [Page 5]
Expires May, 2001 [Page 5]

View file

@ -1,12 +1,11 @@
INTERNET-DRAFT Stuart Kwan
<draft-ietf-dnsext-gss-tsig-00.txt> Praerit Garg
<draft-ietf-dnsext-gss-tsig-01.txt> Praerit Garg
James Gilroy
Levon Esibov
Microsoft Corp.
July 2000
Expires January 2001
November 22, 2000
Expires May 22, 2001
GSS Algorithm for TSIG (GSS-TSIG)
@ -54,9 +53,9 @@ Application Program Interface (GSS-API) (RFC2743).
Expires January 2001 [Page 1]
Expires May 2001 [Page 1]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
Table of Contents
@ -92,7 +91,7 @@ Table of Contents
The Secret Key Transaction Signature for DNS (TSIG) [RFC2845] protocol
was developed to provide a lightweight end to end authentication and
integrity off messages between two DNS entities, such as client and
integrity of messages between two DNS entities, such as client and
server or server and server. TSIG can be used to protect dynamic update
messages, authenticate regular message or to off-load complicated
DNSSEC [RFC2535] processing from a client to a server and still allow
@ -112,9 +111,9 @@ over time. For example, a client and server may use Kerberos [RFC1964]
for one transaction, whereas that same server may use SPKM [RFC2025]
with a different client.
Expires January 2001 [Page 2]
Expires May 22, 2001 [Page 2]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
* The protocol developer is removed from the responsibility of
creating and managing a security infrastructure. For example, the
@ -127,7 +126,7 @@ authentication mechanism only. It does not discuss and/or propose an
authorization mechanism. Readers that are unfamiliar with GSS-API
concepts are encouraged to read the characteristics and concepts section
of [RFC2743] before examining this protocol in detail. It is also
assumed that the reader is familiar with [RFC2845], [TKEY], [RFC1034]
assumed that the reader is familiar with [RFC2845], [RFC2930], [RFC1034]
and [RFC1035].
The key words "MUST", "REQUIRED", "SHOULD", "RECOMMENDED", and
@ -170,9 +169,9 @@ states of a context associated with a connection:
| |
+----------+
Expires January 2001 [Page 3]
Expires May 22, 2001 [Page 3]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
Every connection begins in the uninitialized state.
@ -188,7 +187,7 @@ The GSS-TSIG algorithm consists of two stages:
I. Establish security context. The Client and Server use the
GSS_Init_sec_context and GSS_Accept_sec_context APIs to generate the
tokens that they pass to each other using [TKEY] as a transport
tokens that they pass to each other using [RFC2930] as a transport
mechanism.
II. Once the security context is established it is used to generate and
@ -223,14 +222,14 @@ complete. The number of times the client and server exchange tokens
depends on the underlying security mechanism. A completed negotiation
results in a context handle.
The TKEY resource record [TKEY] is used as the vehicle to transfer
The TKEY resource record [RFC2930] is used as the vehicle to transfer
tokens between client and server. The TKEY record is a general
mechanism for establishing secret keys for use with TSIG. For more
information, see [TKEY].
information, see [RFC2930].
Expires January 2001 [Page 4]
Expires May 22, 2001 [Page 4]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
3.1.1 Call GSS_Init_sec_context
@ -246,12 +245,13 @@ indicated with the output values below. Consult Sections 2.2.1
default"). Client MAY instead specify some other valid handle
to its credentials.
CONTEXT HANDLE input_context_handle = 0
INTERNAL NAME targ_name = "DNS/<target_server_name>"
INTERNAL NAME targ_name = "DNS@<target_server_name>"
OBJECT IDENTIFIER mech_type = Underlying security
mechanism chosen by implementers. To guarantee
interoperability of the implementations of the GSS-TSIG
mechanism client MUST specify a valid underlying security
mechanism that enables use of Kerberos v5.
mechanism that enables use of Kerberos v5 (see Section 9 for
more information).
OCTET STRING input_token = NULL
BOOLEAN replay_det_req_flag = TRUE
BOOLEAN mutual_req_flag = TRUE
@ -285,10 +285,9 @@ indicated with the output values below. Consult Sections 2.2.1
Expires May 22, 2001 [Page 5]
Expires January 2001 [Page 5]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
The client MUST abandon the algorithm if returned major_status is set to
@ -336,7 +335,7 @@ owner name of the TKEY resource record set queried for and the owner
name of the supplied TKEY resource record in the additional records
section MUST be the same. This name uniquely identifies the security
context to both the client and server, and thus the client SHOULD use
a value which is globally unique as described in [TKEY].
a value which is globally unique as described in [RFC2930].
@ -344,22 +343,22 @@ a value which is globally unique as described in [TKEY].
Expires January 2001 [Page 6]
Expires May 22, 2001 [Page 6]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
TKEY Record
NAME = client-generated globally unique domain name string
(as described in [TKEY])
(as described in [RFC2930])
RDATA
Algorithm Name = gss-tsig
Mode = 3 (GSS-API negotiation - per [TKEY])
Mode = 3 (GSS-API negotiation - per [RFC2930])
Key Size = size of output_token in octets
Key Data = output_token
The remaining fields in the TKEY RDATA, i.e. Inception, Expiration,
Error, Other Size and Data Fields, MUST be set according to [TKEY].
Error, Other Size and Data Fields, MUST be set according to [RFC2930].
The query is transmitted to the server.
@ -402,9 +401,9 @@ is specified by the policy local to the client.
Expires January 2001 [Page 7]
Expires May 22, 2001 [Page 7]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
If the signature is verified the context state is advanced to Context
@ -460,9 +459,9 @@ If OUTPUT major_status is GSS_S_CONTINUE_NEEDED OR GSS_S_COMPLETE then
client MUST act as described below.
Expires January 2001 [Page 8]
Expires May 22, 2001 [Page 8]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
If major_status is GSS_S_CONTINUE_NEEDED the negotiation is not yet
@ -518,9 +517,9 @@ messages.
Expires January 2001 [Page 9]
Expires May 22, 2001 [Page 9]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
4.1.1 Receive TKEY Query from Client
@ -555,7 +554,7 @@ for syntax definitions.
default"). Server MAY instead specify some other valid handle
to its credentials.
OCTET STRING chan_bindings = Any valid channel bindings
as specified in Section 1.1.6 "Channel Bindings" in [RFC2734]
as specified in Section 1.1.6 "Channel Bindings" in [RFC2743]
OUTPUTS
INTEGER major_status
@ -576,9 +575,9 @@ for syntax definitions.
INTEGER lifetime_rec
CONTEXT_HANDLE delegated_cred_handle
Expires January 2001 [Page 10]
Expires May 22, 2001 [Page 10]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
If this is the first call to GSS_Accept_sec_context in a new
@ -634,9 +633,9 @@ prevent endless looping. Such limit SHOULD NOT exceed value of 10.
Expires January 2001 [Page 11]
Expires May 22, 2001 [Page 11]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
In all cases except if major_status is GSS_S_COMPLETE and output_token
@ -644,11 +643,11 @@ is NULL other TKEY record fields MUST contain the following values:
NAME = key_name
RDATA
Algorithm Name = gss-tsig
Mode = 3 (GSS-API negotiation - per [TKEY])
Mode = 3 (GSS-API negotiation - per [RFC2930])
Key Size = size of output_token in octets
The remaining fields in the TKEY RDATA, i.e. Inception, Expiration,
Error, Other Size and Data Fields, MUST be set according to [TKEY].
Error, Other Size and Data Fields, MUST be set according to [RFC2930].
4.2 Context Established
@ -668,7 +667,7 @@ section 5, Sending and Verifying Signed Messages.
A server can terminate any established context at any time. The
server MAY hint to the client that the context is being deleted
by including a TKEY RR in a response with the Mode field set to 5, i.e.
"key deletion" [TKEY].
"key deletion" [RFC2930].
An active context is deleted by calling GSS_Delete_sec_context
providing the associated context_handle.
@ -692,9 +691,9 @@ Assign the remaining fields in the TSIG RDATA appropriate values
as described in [RFC2845].
Expires January 2001 [Page 12]
Expires May 22, 2001 [Page 12]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
The signature is generated by calling GSS_GetMIC. The following input
@ -750,9 +749,9 @@ TSIG error field (as described in [RFC2845]).
Expires January 2001 [Page 13]
Expires May 22, 2001 [Page 13]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
For the GSS algorithm, a signature is verified by using GSS_VerifyMIC:
@ -808,9 +807,9 @@ to the algorithm described above.
Expires January 2001 [Page 14]
Expires May 22, 2001 [Page 14]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
I. Client initializes security context negotiation
To establish a security context with a server, server.example.com, the
@ -845,7 +844,7 @@ INTERNET-DRAFT GSS-TSIG July 2000
NAME = 789.client.example.com.server.example.com.
RDATA
Algorithm Name = gss-tsig
Mode = 3 (GSS-API negotiation - per [TKEY])
Mode = 3 (GSS-API negotiation - per [RFC2930])
Key Size = size of output_token in octets
Key Data = output_token
@ -866,9 +865,9 @@ INTERNET-DRAFT GSS-TSIG July 2000
Expires January 2001 [Page 15]
Expires May 22, 2001 [Page 15]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
IV. Server calls GSS_Accept_sec_context
To continue security context negotiation server calls
@ -924,9 +923,9 @@ INTERNET-DRAFT GSS-TSIG July 2000
security context is established, but since the output_token is not
NULL client MUST send a TKEY query to the server as described below.
Expires January 2001 [Page 16]
Expires May 22, 2001 [Page 16]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
VII. Client sends a query with QTYPE = TKEY to server
@ -938,7 +937,7 @@ INTERNET-DRAFT GSS-TSIG July 2000
NAME = 789.client.example.com.server.example.com.
RDATA
Algorithm Name = gss-tsig
Mode = 3 (GSS-API negotiation - per [TKEY])
Mode = 3 (GSS-API negotiation - per [RFC2930])
Key Size = size of output_token in octets
Key Data = output_token
@ -982,9 +981,9 @@ INTERNET-DRAFT GSS-TSIG July 2000
Expires January 2001 [Page 17]
Expires May 22, 2001 [Page 17]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
X. Server responds to the TKEY query
@ -1040,9 +1039,9 @@ The security provided by this protocol is only as effective as the
security provided by the underlying GSS mechanisms.
Expires January 2001 [Page 18]
Expires May 22, 2001 [Page 18]
INTERNET-DRAFT GSS-TSIG July 2000
INTERNET-DRAFT GSS-TSIG November 22, 2000
8. IANA Considerations
@ -1056,15 +1055,21 @@ specified in RFC 2845.
9. Conformance
The GSS API provides maximum flexibility to choose the underlying
security mechanisms that enables security context negotiation. GSS API
enables client and server to negotiate and choose such underlying
security mechanisms on the fly. At the same time, in order to guarantee
interoperability between clients and servers that support GSS-TSIG it is
required that a GSS APIs called by such client and server MUST support
Kerberos v5 as an underlying security mechanisms. In addition to this,
GSS APIs used by client and server MAY also support other underlying
security mechanisms.
The GSS API using SPNEGO [RFC2478] provides maximum flexibility to
choose the underlying security mechanisms that enables security context
negotiation. GSS API using SPNEGO [RFC2478] enables client and server to
negotiate and choose such underlying security mechanisms on the fly. To
support such flexibility, DNS clients and servers SHOULD specify SPNEGO
mech_type in their GSS API calls. At the same time, in order to
guarantee interoperability between DNS clients and servers that support
GSS-TSIG it is required that
- DNS servers specify SPNEGO mech_type
- GSS APIs called by DNS client support Kerberos v5
- GSS APIs called by DNS server support SPNEGO [RFC2478] and
Kerberos v5.
In addition to these, GSS APIs used by DNS client and server MAY also
support other underlying security mechanisms.
10. Acknowledgements
@ -1074,7 +1079,6 @@ for their contribution to this specification: Chuck Chan, Mike Swift,
Ram Viswanathan, Olafur Gudmundsson and Donald E. Eastlake 3rd.
11. References
[RFC2743] J. Linn, "Generic Security Service Application Program
@ -1082,27 +1086,29 @@ Ram Viswanathan, Olafur Gudmundsson and Donald E. Eastlake 3rd.
January 2000.
[RFC2845] P. Vixie, O. Gudmundsson, D. Eastlake, B. Wellington,
"Secret Key Transaction Signatures for DNS (TSIG)," RFC 2845,
"Secret Key Transaction Signatures for DNS (TSIG)", RFC 2845,
ISC, NAI Labs, Motorola, Nominum, May, 2000,
[TKEY] D. Eastlake 3rd, "Secret Key Establishment for DNS (TKEY
RR)," draft-ietf-dnsext-tkey-*.txt.
[RFC2930] D. Eastlake 3rd, "Secret Key Establishment for DNS (TKEY RR)",
RFC 2930, Motorola, September 2000.
[RFC2535] D. Eastlake 3rd, "Domain Name System Security Extensions,"
RFC 2535, IBM, March 1999.
Expires May 22, 2001 [Page 19]
INTERNET-DRAFT GSS-TSIG November 22, 2000
[RFC2137] D. Eastlake 3rd, "Secure Domain Name System Dynamic Update,"
RFC 2137, CyberCash, April 1997.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
Expires January 2001 [Page 19]
INTERNET-DRAFT GSS-TSIG July 2000
[RFC1034] Mockapetris, P., "Domain Names - Concepts and Facilities",
STD 13, RFC 1034, November 1987.
@ -1115,6 +1121,10 @@ INTERNET-DRAFT GSS-TSIG July 2000
[RFC2025] Adams, C., "The Simple Public-Key GSS-API Mechanism (SPKM)",
RFC 2025, Bell-Northern Research, October 1996.
[RFC2478] Baize, E., Pinkas, D., "The Simple and Protected GSS-API
Negotiation Mechanism", RFC 2478, Bull, December 1998.
12. Author's Addresses
@ -1145,14 +1155,4 @@ USA USA
Expires January 2001 [Page 20]
Expires May 22, 2001 [Page 20]

View file

@ -1,6 +1,6 @@
Internet Draft Paul Hoffman
draft-ietf-idn-race-02.txt IMC & VPNC
October 16, 2000
draft-ietf-idn-race-03.txt IMC & VPNC
November 22, 2000
Expires in six months
RACE: Row-based ASCII Compatible Encoding for IDN
@ -19,7 +19,6 @@ and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
@ -27,7 +26,6 @@ material or to cite them other than as "work in progress."
http://www.ietf.org/shadow.html.
Abstract
This document describes a transformation method for representing
@ -63,10 +61,11 @@ ideas in arch-3, I no longer support that idea and instead only support
arch-2. Of course, someone else might right an IDN proposal that matches
arch-3 and use RACE as the protocol.
In formal terms, RACE describes a character encoding scheme of the ISO
10646 [ISO10646] coded character set and the rules for using that scheme
in the DNS. As such, it could also be called a "charset" as defined in
[IDNReq].
In formal terms, RACE describes a character encoding scheme of the
ISO/IEC 10646 [ISO10646] coded character set (whose assignment of
characters is synchronized with Unicode [Unicode3]) and the rules for
using that scheme in the DNS. As such, it could also be called a
"charset" as defined in [IDNReq].
The RACE protocol has the following features:
@ -172,39 +171,44 @@ subsections given here.
If a name part consists exclusively of characters that conform to the
host name requirements in [STD13], the name MUST NOT be converted to
RACE. That is, a name part that can be represented without RACE MUST NOT
be encoded using RACE. This absolute requirement prevents there from
LACE. That is, a name part that can be represented without LACE MUST NOT
be encoded using LACE. This absolute requirement prevents there from
being two different encodings for a single DNS host name.
If any checking for prohibited name parts (such as ones that are
prohibited characters, case-folding, or canonicalization) is to be done,
it MUST be done before doing the conversion to an ACE name part.
Characters outside the first plane of characters (those with codepoints
above U+FFFF) MUST be represented using surrogates, as described in the
UTF-16 description in ISO 10646.
The input name string consists of characters from the ISO 10646
character set in big-endian UTF-16 encoding. This is the pre-converted
string.
Characters outside the first plane of characters (that is, outside the
first 0xFFFF characters) MUST be represented using surrogates, as
described in the UTF-16 description in ISO 10646.
2.2.1 Check the input string for disallowed names
2.2.1 Compress the pre-converted string
If the input string consists only of characters that conform to the host
name requirements in [STD13], the conversion MUST stop with an error.
2.2.2 Compress the pre-converted string
The entire pre-converted string MUST be compressed using the compression
algorithm specified in section 2.4. The result of this step is the
compressed string.
2.2.2 Check the length of the compressed string
2.2.3 Check the length of the compressed string
The compressed string MUST be 36 octets or shorter. If the compressed
string is 37 octets or longer, the conversion MUST stop with an error.
2.2.3 Encode the compressed string with Base32
2.2.4 Encode the compressed string with Base32
The compressed string MUST be converted using the Base32 encoding
described in section 2.5. The result of this step is the encoded string.
2.2.4 Prepend "bq--" to the encoded string and finish
2.2.5 Prepend "bq--" to the encoded string and finish
Prepend the characters "bq--" to the encoded string. This is the host
name part that can be used in DNS resolution.
@ -212,11 +216,17 @@ name part that can be used in DNS resolution.
2.3 Converting a host name part to an internationalized name
The input string for conversion is a valid host name part. Note that if
any checking for prohibited name parts (such as ones that are already
legal DNS name parts), prohibited characters, case-folding, or
canonicalization is to be done, it MUST be done after doing the
conversion from an ACE name part. (Previous versions of this draft
specified these steps.)
any checking for prohibited name parts (such as prohibited characters,
case-folding, or canonicalization is to be done, it MUST be done after
doing the conversion from an ACE name part.
If a decoded name part consists exclusively of characters that conform
to the host name requirements in [STD13], the conversion from LACE MUST
fail. Because a name part that can be represented without LACE MUST NOT
be encoded using LACE, the decoding process MUST check for name parts
that consists exclusively of characters that conform to the host name
requirements in [STD13] and, if such a name part is found, MUST
beconsidered an error (and possibly a security violation).
2.3.1 Strip the "bq--"
@ -241,6 +251,12 @@ The entire decoded string MUST be converted to ISO 10646 characters
using the decompression algorithm described in section 2.4. The result
of this is the internationalized string.
2.3.4 Check the internationalized string for disallowed names
If the internationalized string consists only of characters that conform
to the host name requirements in [STD13], the conversion MUST stop with
an error.
2.4 Compression algorithm
The basic method for compression is to reduce a full string that
@ -282,10 +298,11 @@ section.
2.4.1 Compressing a string
The input string is in UTF-16 encoding with no byte order mark.
The input string is in big-endian UTF-16 encoding with no byte order
mark.
Design note: No checking is done on the input to this algorithm. It is
assumed that all checking for valid ISO 10646 characters has already
assumed that all checking for valid ISO/IEC 10646 characters has already
been done by a previous step in the conversion process.
Design note: In step 5, 0xFF was chosen as the escape character because
@ -295,20 +312,25 @@ second octet for the "escaped escape" because the character U+0099 has
no value, and is not even used as a control character in the C1 controls
or in ISO 6429.
1) Read each pair of octets in the input stream, comparing the upper
octet of each. If all of the upper octets (called U1) are the same, go
to step 4.
1) Starting at the beginning of the input, read each pair of octets in
the input stream, comparing the upper octet of each. Reset the input
pointer to the beginning of the input again. If all of the upper octets
(called U1) are the same, go to step 4. Note that if the input is only
one character, this test will always be true.
2) Read each pair of octets in the input stream, comparing the upper
octet of each. If all of the upper octets are either 0 or one single
other value (called U1), go to step 4.
octet of each. Reset the input pointer to the beginning of the input
again. If all of the upper octets are either 0x00 or one single other
value (called U1), go to step 4.
3) Output 0xD8, followed by the entire input stream. Finish.
4) Output U1.
4) If U1 is in the range 0xD8 to 0xDC, stop with an error. Otherwise,
output U1.
5) If you are at the end of the input string, finish. Otherwise, read
the next octet, called U2, and the octet after that, called N1.
the next octet, called U2, and the octet after that, called N1. If U2 is
0x00 and N1 is 0x99, stop with an error.
6) If U2 is equal to U1, and N1 is not equal to 0xFF, output N1, and go
to step 5.
@ -321,37 +343,52 @@ by 0x99, and go to step 5.
2.4.2 Decompressing a string
1) Read the first octet of the input string. Call the value of the first
octet U1. If U1 is 0xD8, go to step 7.
octet U1. If there are no more octets in the input string (that is, if
the input string had only one octet total), stop with an error. If U1 is
0xD8, go to step 8.
2) If you are at the end of the input string, finish. Otherwise, read
the next octet in the input string, called N1. If N1 is 0xFF, go to step
4.
2) If you are at the end of the input string, go to step 11. Otherwise,
read the next octet in the input string, called N1. If N1 is 0xFF, go to
step 5.
3) Output U1 followed by N1. Go to step 2.
3) If U1 is 0x00 and N1 is 0x99, stop with an error.
4) If you are at the end of the input string, stop with an error.
4) Put U1 followed by N1 in the output buffer. Go to step 2.
5) Read the next octet of the input string, called N1. If N1 is 0x99,
output U1 followed by 0xFF, and go to step 2.
5) If you are at the end of the input string, stop with an error.
6) Output 0x00 followed by N1. Go to step 2.
6) Read the next octet of the input string, called N1. If N1 is 0x99,
put U1 followed by 0xFF in the output buffer, and go to step 2.
7) Read the rest of the input stream and put it in the output stream.
Finish.
7) Put 0x00 followed by N1 in the output buffer. Go to step 2.
8) Read the rest of the input stream into a temporary string called
LCHECK. If the length of LCHECK is an odd number, stop with an error.
9) Perform the checks from steps 1 and 2 of the compression algorithm in
section 2.4.1 on LCHECK. If either checks pass (that is, if either would
have created a compressed string), stop with an error because the input
to the decompression is in the wrong format.
10) If the length of LCHECK is odd, stop with and error. Otherwise,
output LCHECK and finish.
11) If the length of the output buffer is odd, stop with and error.
Otherwise, emit the output buffer and finish.
2.4.3 Compression examples
For the input string of <U+012E><U+0110><U+014A>, all characters are in
the same row, 0x01. Thus, the output is 0x012E104A.
For the input string of <U+012D><U+0111><U+014B>, all characters are in
the same row, 0x01. Thus, the output is 0x012D114B.
For the input string of <U+012E><U+00D0><U+014A>, the characters are all
in row 0x01 or row 0x00. Thus, the output is 0x012EFFD04A.
For the input string of <U+012D><U+00E0><U+014B>, the characters are all
in row 0x01 or row 0x00. Thus, the output is 0x012DFFE04B.
For the input string of <U+1290><U+12FF><U+120C>, the characters are all
in row 0x12. Thus, the output is 0x1290FF990C.
For the input string of <U+012E><U+00D0><U+24C3>, the characters are
from two rows other than 0x00. Thus, the output is 0xD8012E00D024C3.
For the input string of <U+012D><U+00E0><U+24D3>, the characters are
from two rows other than 0x00. Thus, the output is 0xD8012D00E024D3.
2.5 Base32
@ -394,10 +431,11 @@ Design note: The assumption that the input is a stream of octets
If you are reusing this algorithm for a stream of bits, you must add a
padding mechanism in order to differentiate different lengths of input.
1) Set the read pointer to the beginning of the input bit stream.
1) If the input bit stream is not an even multiple of five bits, pad
the input stream with 0 bits until it is an even multiple of five bits.
Set the read pointer to the beginning of the input bit stream.
2) Look at the five bits after the read pointer. If there are not five
bits, go to step 5.
2) Look at the five bits after the read pointer.
3) Look up the value of the set of five bits in the bits column of
Table 1, and output the character from the char column (whose hex value
@ -407,26 +445,28 @@ is in the hex column).
the end of the input bit stream (that is, there are no more bits in the
input), stop. Otherwise, go to step 2.
5) Pad the bits seen until there are five bits.
6) Look up the value of the set of five bits in the bits column of
Table 1, and output the character from the char column (whose hex value
is in the hex column).
2.5.2 Decoding Base32 as octets
The input is octets in network byte order. The input octets MUST be
values from the second column in Table 1.
1) Set the read pointer to the beginning of the input octet stream.
1) Count the number of octets in the input and divide it by 8; call the
remainder INPUTCHECK. If INPUTCHECK is 1 or 3 or 6, stop with an error.
2) Look up the character value of the octet in the char column (or hex
value in hex column) of Table 1, and output the five bits from the bits
column.
2) Set the read pointer to the beginning of the input octet stream.
3) Move the read pointer one octet forward. If the read pointer is at
the end of the input octet stream (that is, there are no more octets in
the input), stop. Otherwise, go to step 2.
3) Look up the character value of the octet in the char column (or hex
value in hex column) of Table 1, and add the five bits from the bits
column to the output buffer.
4) Move the read pointer one octet forward. If the read pointer is not
at the end of the input octet stream (that is, there are more octets in
the input), go to step 3.
5) Count the number of bits that are in the output buffer and divide it
by 8; call the remainder PADDING. If the PADDING number of bits at the
end of the output buffer are not all zero, stop with an error.
Otherwise, emit the output buffer and stop.
2.5.3 Base32 example
@ -498,23 +538,40 @@ specification", November 1987, STD 13 (RFC 1035).
A. Acknowledgements
Mark Davis contributed many ideas to the initial draft of this document.
Graham Klyne and Martin Duerst offered technical comments on the
algorithms used. GIM Gyeongseog and Pongtorn Jentaweepornkul helped fix
technical errors in early drafts.
Mark Davis contributed many ideas to the initial draft of this document,
as well as comments in later versions. Graham Klyne and Martin Duerst
offered technical comments on the algorithms used. GIM Gyeongseog and
Pongtorn Jentaweepornkul helped fix technical errors in early drafts.
Rick Wesson and Mark Davis contributed many suggestions on error
conditions in the processing.
Base32 is quite obviously inspired by the tried-and-true Base64
Content-Transfer-Encoding from MIME.
B. Changes from Versions -01 to -02 of this Draft
B. Changes from Versions -02 to -03 of this Draft
Removed section 1.3 (open issues) because no one said anything
in support of either proposal.
1: Wording corrections to third paragraph.
Added the prohibition on encoding a string that is already in
STD13 format in section 2.2.
2.2 and 2.3: Added need to check for all-STD13.
2.4.1: Wording corrections in the first two paragraphs. Made step 1 and
2 clearer with resetting the input pointer. Also added sentence at the
end of step 1. Also added error conditions in steps 4 and 5.
2.4.2: Added error condition in step 1. Added a new step 3 for an error
check. Expanded step 8 to check for malformed input error. Added error
check for odd-length output.
2.4.3: Changed all the examples to use lowercase characters on input.
2.5.1: Made the list of steps shorter by padding with 0 bits at the
beginning of the steps.
2.5.2: Changed the sense of the test in step 3 and added step 4 to be
checkfor malformed input. Also made the output a buffer. Also added
new step 1.
C. IANA Considerations