Extensible Messaging and Presence Protocol (XMPP): Address FormatCisco Systems, Inc.1899 Wyknoop Street, Suite 600DenverCO80202USA+1-303-308-3282psaintan@cisco.com
Applications
Extensible Messaging and Presence ProtocolXMPPJabberMessagingInstant MessagingPresenceExtensible Markup LanguageXMLThis document defines the format for addresses used in the Extensible Messaging and Presence Protocol (XMPP), including support for non-ASCII characters.The Extensible Messaging and Presence Protocol is an application profile of the Extensible Markup Language for streaming XML data in close to real time between any two or more network-aware entities. The address format for such entities was originally developed in the Jabber open-source community in 1999 (thus for historical reasons the native address of an XMPP entity is called a Jabber Identifier or JID). In essence, a JID contains up to three parts, in the arrangement <localpart@domainpart/resourcepart> (where the localpart and resourcepart are both discretionary and each part can contain nearly any Unicode code point , encoded according to ). The JID format was first described by in 2002, then defined canonically by in 2004. As defined in RFC 3920, the XMPP address format re-uses the "stringprep" technology for preparation of non-ASCII characters , including the Nameprep profile for internationalized domain names as specified in and along with two XMPP-specific profiles for the localpart and resourcepart. Since the publication of RFC 3920, IDNA2003 has been superseded by IDNA2008 (see and related documents). As a result, other protocols that use stringprep (including XMPP) have begun to migrate from stringprep toward more "modern" approaches. Because work on improved handling of internationalized addresses is currently in progress, specifying the XMPP address format in the specification that obsoletes RFC 3920 would unacceptably delay the revision process. Therefore, this specification provides updated documentation of the XMPP address format (essentially copied from RFC 3920), with the intent that it can be superseded once work on a new approach to internationalization is complete.An ENTITY is anything that is network-addressable and that can communicate using XMPP. For historical reasons, the native address of an XMPP entity is called a JABBER IDENTIFIER or JID. A valid JID contains a set of ordered elements formed of an XMPP localpart, domainpart, and resourcepart.The syntax for a JID is defined as follows using the Augmented Backus-Naur Form as specified in .All JIDs are based on the foregoing structure. One common use of this structure is to identify a messaging and presence account, the server that hosts the account, and a connected resource (e.g., a specific device) in the form of <localpart@domain/resource>. However, localparts other than clients are possible; for example, a specific chat room offered by a multi-user chat service (see ) is addressed as <room@service> (where "room" is the name of the chat room and "service" is the hostname of the multi-user chat service) and a specific occupant of such a room could be addressed as <room@service/nick> (where "nick" is the occupant's room nickname). Many other JID types are possible (e.g., <domain/resource> could be a server-side script or service).Each allowable portion of a JID (localpart, domainpart, and resourcepart) MUST NOT be zero bytes in length and MUST NOT be more than 1023 bytes in length, resulting in a maximum total size (including the '@' and '/' separators) of 3071 bytes.Although the format of a JID is roughly consistent with , an entity's address on an XMPP network MUST be represented as a JID (without a URI scheme) and not a or as specified in ; the latter specification is provided only for identification and interaction outside the context of the XMPP wire protocol itself.Implementation Note: When dividing a JID into its component parts, an implementation needs to match the separator characters '@' and '/' before applying any transformation algorithms, which might decompose certain Unicode code points to the separator characters (e.g., U+FE6B SMALL COMMERCIAL AT might decompose into U+0040 COMMERCIAL AT).The DOMAINPART of a JID is that portion after the '@' character (if any) and before the '/' character (if any); it is the primary identifier and is the only REQUIRED element of a JID (a mere domainpart is a valid JID). Typically a domainpart identifies the "home" server to which clients connect for XML routing and data management functionality. However, it is not necessary for an XMPP domainpart to identify an entity that provides core XMPP server functionality (e.g., a domainpart can identify an entity such as a multi-user chat service, a publish-subscribe service, or a user directory).The domainpart for every server or service that will communicate over a network SHOULD be a fully qualified domain name or "FQDN" (see ); although the domainpart MAY be either an Internet Protocol (IPv4 or IPv6) address or a text label that is resolvable on a local network (commonly called an "unqualified hostname"), it is possible that domainparts that are IP addresses will not be acceptable to other services for the sake of interdomain communication. Furthermore, domainparts that are unqualified hostnames MUST NOT be used on public networks but MAY be used on private networks.Note: If the domainpart includes a final character considered to be a label separator (dot) by or , this character MUST be stripped from the domainpart before the JID of which it is a part is used for the purpose of routing an XML stanza, comparing against another JID, or constructing an ; in particular, the character MUST be stripped before any other canonicalization steps are taken, such as application of the profile of or completion of the ToASCII operation as described in .A domainpart consisting of a fully qualified domain name MUST be an "internationalized domain name" as defined in , that is, "a domain name in which every label is an internationalized label". When preparing a text label (consisting of a sequence of properly-encoded Unicode code points) for representation as an internationalized label in the process of constructing an XMPP domainpart or comparing two XMPP domainparts, an application MUST ensure that for each text label it is possible to apply without failing the ToASCII operation specified in with the UseSTD3ASCIIRules flag set (thus forbidding ASCII code points other than letters, digits, and hyphens). If the ToASCII operation can be applied without failing, then the label is an internationalized label. An internationalized domain name (and therefore an XMPP domainpart) is constructed from its constituent internationalized labels by following the rules specified in .Note: The ToASCII operation includes application of the profile of and encoding using the algorithm specified in ; for details, see . Although the output of the ToASCII operation is not used in XMPP, it MUST be possible to apply that operation without failing.In the terms of IDNA2008 , the domainpart of a JID is a "domain name slot".The LOCALPART of a JID is an optional identifier placed before the domainpart and separated from the latter by the '@' character. Typically a localpart uniquely identifies the entity requesting and using network access provided by a server (i.e., a local account), although it can also represent other kinds of entities (e.g., a chat room associated with a multi-user chat service). The entity represented by an XMPP localpart is addressed within the context of a specific domain.A localpart MUST NOT be zero bytes in length and MUST NOT be more than 1023 bytes in length.A localpart MUST be formatted such that the Nodeprep profile of can be applied without failing (see ). Before comparing two localparts, an application MUST first ensure that the Nodeprep profile has been applied to each identifier (the profile need not be applied each time a comparison is made, as long as it has been applied before comparison).The resourcepart of a JID is an optional identifier placed after the domainpart and separated from the latter by the '/' character. A resourcepart can modify either a <localpart@domainpart> address or a mere <domainpart> address. Typically a resourcepart uniquely identifies a specific connection (e.g., a device or location) or object (e.g., an occupant in a multi-user chat room) belonging to the entity associated with an XMPP localpart at a local domain.When an XMPP address does not include a resourcepart (i.e., when it is of the form <domainpart> or <localpart@domainpart>), it is referred to as a BARE JID. When an XMPP address includes a resourcepart (i.e., when it is of the form <domain/resource> or <localpart@domain/resource>), is referred to as a FULL JID.A resourcepart MUST NOT be zero bytes in length and MUST NOT be more than 1023 bytes in length.A resourcepart MUST be formatted such that the Resourceprep profile of can be applied without failing (see ). Before comparing two resourceparts, an application MUST first ensure that the Resourceprep profile has been applied to each identifier (the profile need not be applied each time a comparison is made, as long as it has been applied before comparison).Note: For historical reasons, the term "resource identifier" is often used in XMPP to refer to the optional portion of an XMPP address that follows the domainpart and the "/" separator character; to help prevent confusion between an XMPP "resource identifier" and the meanings of "resource" and "identifier" provided in Section 1.1 of , this specification uses the term "resourcepart" instead of "resource identifier" (as in RFC 3920).XMPP entities SHOULD consider resourceparts to be opaque strings and SHOULD NOT impute meaning to any given resourcepart. In particular:Use of the '/' character as a separator between the domainpart and the resourcepart does not imply that XMPP addresses are hierarchical in the way that, say, HTTP addresses are hierarchical; thus for example an XMPP address of the form <localpart@domain/foo/bar> does not identify a resource "bar" that exists below a resource "foo" in a hierarchy of resources associated with the entity "localpart@domain".The '@' character is allowed in the resourcepart, and is often used in the "nick" shown in XMPP chatrooms. For example, the JID <room@chat.example.com/user@host> describes an entity who is an occupant of the room <room@chat.example.com> with an (asserted) nick of <user@host>. However, chatroom services do not necessarily check such an asserted nick against the occupant's real JID.An XMPP server MUST support and enforce for domainparts, the Nodeprep profile of for localparts, and the Resourceprep profile of for resourceparts; this enables XMPP addresses to include a wide variety of characters outside the US-ASCII range.The security considerations described in apply to the Nodeprep and Resourceprep profiles defined in this document for XMPP localparts and resourceparts. The security considerations described in and apply to the Nameprep profile that is re-used here for XMPP domainparts.The security considerations described in apply to the use of Unicode characters in XMPP addresses.The Unicode and ISO/IEC 10646 repertoires have many characters that look similar (so-called "confusable characters"). In many cases, users of security protocols might perform visual matching, such as when comparing the names of trusted third parties. Because it is impossible to map similar-looking characters without a great deal of context (such as knowing the fonts used), stringprep does nothing to map similar-looking characters together, nor to prohibit some characters because they look like others. Some specific suggestions about identification and handling of confusable characters appear in the Unicode Security Considerations .A localpart can be employed as one part of an entity's address in XMPP. One common usage is as the username of an instant messaging user; another is as the name of a multi-user chat room; and many other kinds of entities could use localparts as part of their addresses. The security of such services could be compromised based on different interpretations of the internationalized localpart; for example, a user entering a single internationalized localpart could access another user's account information, or a user could gain access to a hidden or otherwise restricted chat room or service.A resourcepart can be employed as one part of an entity's address in XMPP. One common usage is as the name for an instant messaging user's connected resource; another is as the nickname of a user in a multi-user chat room; and many other kinds of entities could use resourceparts as part of their addresses. The security of such services could be compromised based on different interpretations of the internationalized resourcepart; for example, a user could attempt to initiate multiple connections with the same name, or a user could send a message to someone other than the intended recipient in a multi-user chat room.Further discussion is provided under .There are two forms of address spoofing: forging and mimicking.In the context of XMPP technologies, address forging occurs when an entity is able to generate an XML stanza whose 'from' address does not correspond to the account credentials with which the entity authenticated onto the network (or an authorization identity provided during SASL negotiation). For example, address forging occurs if an entity that authenticated as "juliet@im.example.com" is able to send XML stanzas from "nurse@im.example.com" or "romeo@example.net".Address forging is difficult in XMPP systems, given the requirement for sending servers to stamp 'from' addresses and for receiving servers to verify sending domains via server-to-server authentication (see ). However, address forging is not impossible, since a rogue server could forge JIDs at the sending domain by ignoring the stamping requirement. Therefore, an entity outside the security perimeter of a particular server cannot reliably distinguish between bare JIDs of the form <localpart@domainpart> at that server and thus can authenticate only the domainpart of such JIDs with any level of assurance. This specification does not define methods for discovering or counteracting such rogue servers.Furthermore, it is possible for an attacker to forge JIDs at other domains by means of a DNS poisoning attack if DNS security extensions are not used.Address mimicking occus when an entity provides legitimate authentication credentials for and sends XML stanzas from an account whose JID appears to a human user to be the same as another JID. For example, in some XMPP clients the address "paypa1@example.org" (spelled with the number one as the final character of the localpart) might appear to be the same as "paypal@example.org (spelled with the lower-case version of the letter "L"), especially on casual visual inspection; this phenomenon is sometimes called "typejacking". A more sophisticated example of address mimicking might involve the use of characters from outside the US-ASCII range, such as the Cherokee characters U+13DA U+13A2 U+13B5 U+13AC U+13A2 U+13AC U+13D2 instead of the US-ASCII characters "STPETER".In some examples of address mimicking, it is unlikely that the average user could tell the difference between the real JID and the fake JID. (Indeed, there is no way to distinguish with full certainty which is the fake JID and which is the real JID; in some communication contexts, the JID with Cherokee characters might be the real JID and the JID with US-ASCII characters might thus appear to be the fake JID.) Because JIDs can contain almost any Unicode character, it can be relatively easy to mimic some JIDs in XMPP systems. The possibility of address mimicking introduces security vulnerabilities of the kind that have also plagued the World Wide Web, specifically the phenomenon known as phishing.As noted in , "there are no comprehensive technical solutions to the problems of confusable characters". Mimicked JIDs that involve characters from only one character set or from the character set typically employed by a particular user are not easy to combat (e.g., the simple typejacking attack previously described, which relies on a surface similarity between the characters "1" and "l" in some presentations). However, mimicked addresses that involve characters from more than one character set, or from a character set not typically employed by a particular user, can be mitigated somewhat through intelligent presentation. In particular, every human user of an XMPP technology presumably has a preferred language (or, in some cases, a small set of preferred languages), which an XMPP application SHOULD gather either explicitly from the user or implicitly via the operating system of the user's device. Furthermore, every language has a range (or a small set of ranges) of characters normally used to represent that language in textual form. Therefore, an XMPP application SHOULD warn the user when presenting a JID that uses characters outside the normal range of the user's preferred language(s). This recommendation is not intended to discourage communication across language communities; instead, it recognizes the existence of such language communities and encourages due caution when presenting unfamiliar character sets to human users.The following sections update the registrations provided in .The Nodeprep profile of stringprep is defined under Nodeprep. The IANA has registered Nodeprep in the stringprep profile registry.Name of this profile:NodeprepRFC in which the profile is defined:&rfc.number;Indicator whether or not this is the newest version of the profile:This is the first version of NodeprepThe Resourceprep profile of stringprep is defined under Resourceprep. The IANA has registered Resourceprep in the stringprep profile registry.Name of this profile:ResourceprepRFC in which the profile is defined:&rfc.number;Indicator whether or not this is the newest version of the profile:This is the first version of ResourceprepThis section describes a protocol feature set that summarizes the conformance requirements of this specification. This feature set is appropriate for use in software certification, interoperability testing, and implementation reports. For each feature, this section provides the following information:A human-readable nameAn informational descriptionA reference to the particular section of this document that normatively defines the featureWhether the feature applies to the Client role, the Server role, or both (where "N/A" signifies that the feature is not applicable to the specified role)Whether the feature MUST or SHOULD be implemented, where the capitalized terms are to be understood as described in The feature set specified here attempts to adhere to the concepts and formats proposed by Larry Masinter within the IETF's NEWTRK Working Group in 2005, as captured in . Although this feature set is more detailed than called for by , it provides a suitable basis for the generation of implementation reports to be submitted in support of advancing this specification from Proposed Standard to Draft Standard in accordance with .address-domain-lengthEnsure that the domainpart of an XMPP address is at least one byte in length and at most 1023 bytes in length.Both MUST.address-domain-prepEnsure that the domainpart of an XMPP address conforms to the Nameprep profile of Stringprep.Client SHOULD, Server MUST.address-localpart-lengthEnsure that the localpart of an XMPP address is at least one byte in length and at most 1023 bytes in length.Both MUST.address-localpart-prepEnsure that the localpart of an XMPP address conforms to the Nodeprep profile of Stringprep.Client SHOULD, Server MUST.address-resource-lengthEnsure that the resourcepart of an XMPP address is at least one byte in length and at most 1023 bytes in length.Both MUST.address-resource-prepEnsure that the resourcepart of an XMPP address conforms to the Resourceprep profile of Stringprep.Client SHOULD, Server MUST.Augmented BNF for Syntax Specifications: ABNFInternet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS TRACK]Internationalizing Domain Names in Applications (IDNA)Key words for use in RFCs to Indicate Requirement LevelsHarvard University1350 Mass. Ave.CambridgeMA 02138- +1 617 495 3864sob@harvard.edu
General
keyword
In many standards track documents several words are used to signify
the requirements in the specification. These words are often
capitalized. This document defines these words as they should be
interpreted in IETF documents. Authors who follow these guidelines
should incorporate this phrase near the beginning of their document:
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
RFC 2119.
Note that the force of these words is modified by the requirement
level of the document in which they are used.
Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)Preparation of Internationalized Strings ("stringprep")The Unicode Standard, Version 3.2.0The Unicode Consortium
The Unicode Standard, Version 3.2.0 is defined by The Unicode Standard, Version 3.0 (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5), as amended by the Unicode Standard Annex #27: Unicode 3.1 (http://www.unicode.org/reports/tr27/) and by the Unicode Standard Annex #28: Unicode 3.2 (http://www.unicode.org/reports/tr28/).
Unicode Technical Report #36: Unicode Security ConsiderationsThe Unicode ConsortiumUTF-8, a transformation format of ISO 10646Extensible Messaging and Presence Protocol (XMPP): CoreThis document defines the core features of the Extensible Messaging and Presence Protocol (XMPP), a technology for streaming Extensible Markup Language (XML) elements in order to exchange structured information in close to real time between any two or more network- aware entities. XMPP provides a generalized, extensible framework for incrementally exchanging XML data, upon which a variety of applications can be built. The framework includes methods for stream setup and teardown, channel encryption, authentication of a client to a server and of one server to another server, and primitives for push-style messages, publication of network availability information ("presence"), and request-response interactions between any two XMPP entities. This document obsoletes RFC 3920.Domain names - implementation and specificationUSC/ISI4676 Admiralty WayMarina del ReyCA90291US+1 213 822 1511DNS Security Introduction and RequirementsThe Domain Name System Security Extensions (DNSSEC) add data origin authentication and data integrity to the Domain Name System. This document introduces these extensions and describes their capabilities and limitations. This document also discusses the services that the DNS security extensions do and do not provide. Last, this document describes the interrelationships between the documents that collectively describe DNSSEC. [STANDARDS TRACK] Internationalized Domain Names for Applications (IDNA): Definitions and Document FrameworkThis document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set.Internationalized Domain Names in Applications (IDNA): ProtocolThis document is the revised protocol definition for internationalized domain names (IDNs). The rationale for changes, the relationship to the older specification, and importantFormalizing IETF Interoperability ReportingThis document suggests another way of reforming IETF standards process by formalizing the mechanism for interoperability reporting, as a way of facilitating standards development. It establishes two kinds of reports: a 'Protocol Feature Set', which lays out the set of features from IETF specifications that constitute a protocol, and a 'Protocol Implementation Report', which is submitted by an individual or group to report on implementation and interoperability testing.Internationalized Resource Identifiers (IRIs)<p>This document defines a new protocol element, the Internationalized Resource Identifier (IRI), as a complement of the Uniform Resource Identifier (URI). An IRI is a sequence of characters from the Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to URIs is defined, which means that IRIs can be used instead of URIs, where appropriate, to identify resources.</p><p> The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs. This was done in order to allow a clear distinction and to avoid incompatibilities with existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</p>The Internet Standards Process -- Revision 3Harvard University1350 Mass. Ave.CambridgeMA02138US+1 617 495 3864sob@harvard.eduThis memo documents the process used by the Internet community for the standardization of protocols and procedures. It defines the stages in the standardization process, the requirements for moving a document between stages and the types of documents used during this process. It also addresses the intellectual property rights and copyright issues associated with the standards process.Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)Punycode is a simple and efficient transfer encoding syntax designed for use with Internationalized Domain Names in Applications (IDNA). It uniquely and reversibly transforms a Unicode string into an ASCII string. ASCII characters in the Unicode string are represented literally, and non-ASCII characters are represented by ASCII characters that are allowed in host name labels (letters, digits, and hyphens). This document defines a general algorithm called Bootstring that allows a string of basic code points to uniquely represent any string of code points drawn from a larger set. Punycode is an instance of Bootstring that uses particular parameter values specified by this document, appropriate for IDNA. [STANDARDS TRACK] Guidance on Interoperation and Implementation Reports for Advancement to Draft StandardAdvancing a protocol to Draft Standard requires documentation of the interoperation and implementation of the protocol. Historic reports have varied widely in form and level of content and there is little guidance available to new report preparers. This document updates the existing processes and provides more detail on what is appropriate in an interoperability and implementation report. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.Extensible Messaging and Presence Protocol (XMPP): CoreJabber Software Foundationstpeter@jabber.org
Applications
XMPP Working GroupRFCRequest for CommentsI-DInternet-DraftXMPPExtensible Messaging and Presence ProtocolJabberIMInstant MessagingPresenceXMLExtensible Markup LanguageThis memo defines the core features of the Extensible Messaging and Presence Protocol (XMPP), a protocol for streaming Extensible Markup Language (XML) elements in order to exchange structured information in close to real time between any two network endpoints. While XMPP provides a generalized, extensible framework for exchanging XML data, it is used mainly for the purpose of building instant messaging and presence applications that meet the requirements of RFC 2779.Uniform Resource Identifier (URI): Generic SyntaxWorld Wide Web ConsortiumMassachusetts Institute of Technology77 Massachusetts AvenueCambridgeMA02139USA+1-617-253-5702+1-617-258-5999timbl@w3.orghttp://www.w3.org/People/Berners-Lee/Day Software5251 California Ave., Suite 110IrvineCA92617USA+1-949-679-2960+1-949-679-2972fielding@gbiv.comhttp://roy.gbiv.com/Adobe Systems Incorporated345 Park AveSan JoseCA95110USA+1-408-536-3024LMM@acm.orghttp://larry.masinter.net/
Applications
uniform resource identifierURIURLURNWWWresource
A Uniform Resource Identifier (URI) is a compact sequence of characters
that identifies an abstract or physical resource. This specification
defines the generic URI syntax and a process for resolving URI references
that might be in relative form, along with guidelines and security
considerations for the use of URIs on the Internet.
The URI syntax defines a grammar that is a superset of all valid URIs,
allowing an implementation to parse the common components of a URI
reference without knowing the scheme-specific requirements of every
possible identifier. This specification does not define a generative
grammar for URIs; that task is performed by the individual
specifications of each URI scheme.
Definition of Jabber Identifiers (JIDs)craigk@jabber.comService Discoveryjhildebr@cisco.comreatmon@jabber.orgstpeter@jabber.orgMulti-User Chatstpeter@jabber.orgPublish-Subscribestpeter@jabber.orgralphm@ik.nuExtensible Markup Language (XML) 1.0 (Fourth Edition)Internationalized Resource Identifiers (IRIs) and Uniform Resource Identifiers (URIs) for the Extensible Messaging and Presence Protocol (XMPP)This document defines the use of Internationalized Resource Identifiers (IRIs) and Uniform Resource Identifiers (URIs) in identifying or interacting with entities that can communicate via the Extensible Messaging and Presence Protocol (XMPP). [STANDARDS TRACK]This appendix defines the "Nodeprep" profile of stringprep. As such, it specifies processing rules that will enable users to enter internationalized localparts in the Extensible Messaging and Presence Protocol (XMPP) and have the highest chance of getting the content of the strings correct. (An XMPP localpart is the optional portion of an XMPP address that precedes an XMPP domainpart and the '@' separator; it is often but not exclusively associated with an instant messaging username.) These processing rules are intended only for XMPP localparts and are not intended for arbitrary text or any other aspect of an XMPP address.This profile defines the following, as required by :The intended applicability of the profile: internationalized localparts within XMPPThe character repertoire that is the input and output to stringprep: Unicode 3.2, specified in Section 2 of this AppendixThe mappings used: specified in Section 3The Unicode normalization used: specified in Section 4The characters that are prohibited as output: specified in Section 5Bidirectional character handling: specified in Section 6This profile uses Unicode 3.2 with the list of unassigned code points being Table A.1, both defined in Appendix A of .This profile specifies mapping using the following tables from :Table B.1Table B.2This profile specifies the use of Unicode normalization form KC, as described in .This profile specifies the prohibition of using the following tables from .Table C.1.1Table C.1.2Table C.2.1Table C.2.2Table C.3Table C.4Table C.5Table C.6Table C.7Table C.8Table C.9In addition, the following additional Unicode characters are also prohibited:U+0022 (QUOTATION MARK), i.e., "U+0026 (AMPERSAND), i.e., &U+0027 (APOSTROPHE), i.e., 'U+002F (SOLIDUS), i.e., /U+003A (COLON), i.e., :U+003C (LESS-THAN SIGN), i.e., <U+003E (GREATER-THAN SIGN), i.e., >U+0040 (COMMERCIAL AT), i.e., @This profile specifies checking bidirectional strings, as described in Section 6 of .Because the additional characters prohibited by Nodeprep are prohibited after normalization, an implementation MUST NOT enable a human user to input any Unicode code point whose decomposition includes those characters; such code points include but are not necessarily limited to the following (refer to for complete information).U+2100 (ACCOUNT OF)U+2101 (ADDRESSED TO THE SUBJECT)U+2105 (CARE OF)U+2106 (CADA UNA)U+226E (NOT LESS-THAN)U+226F (NOT GREATER-THAN)U+2A74 (DOUBLE COLON EQUAL)U+FE13 (SMALL COLON)U+FE60 (SMALL AMPERSAND)U+FE64 (SMALL LESS-THAN SIGN)U+FE65 (SMALL GREATER-THAN SIGN)U+FE6B (SMALL COMMERCIAL AT)U+FF02 (FULLWIDTH QUOTATION MARK)U+FF06 (FULLWIDTH AMPERSAND)U+FF07 (FULLWIDTH APOSTROPHE)U+FF0F (FULLWIDTH SOLIDUS)U+FF1A (FULLWIDTH COLON)U+FF1C (FULLWIDTH LESS-THAN SIGN)U+FF1E (FULLWIDTH GREATER-THAN SIGN)U+FF20 (FULLWIDTH COMMERCIAL AT)This appendix defines the "Resourceprep" profile of stringprep. As such, it specifies processing rules that will enable users to enter internationalized resourceparts in the Extensible Messaging and Presence Protocol (XMPP) and have the highest chance of getting the content of the strings correct. (An XMPP resourcepart is the optional portion of an XMPP address that follows an XMPP domainpart and the '/' separator.) These processing rules are intended only for XMPP resourceparts and are not intended for arbitrary text or any other aspect of an XMPP address.This profile defines the following, as required by :The intended applicability of the profile: internationalized resourceparts within XMPPThe character repertoire that is the input and output to stringprep: Unicode 3.2, specified in Section 2 of this AppendixThe mappings used: specified in Section 3The Unicode normalization used: specified in Section 4The characters that are prohibited as output: specified in Section 5Bidirectional character handling: specified in Section 6This profile uses Unicode 3.2 with the list of unassigned code points being Table A.1, both defined in Appendix A of .This profile specifies mapping using the following tables from :Table B.1This profile specifies the use of Unicode normalization form KC, as described in .This profile specifies the prohibition of using the following tables from .Table C.1.2Table C.2.1Table C.2.2Table C.3Table C.4Table C.5Table C.6Table C.7Table C.8Table C.9This profile specifies checking bidirectional strings, as described in Section 6 of .Based on consensus derived from implementation and deployment experience as well as formal interoperability testing, the following substantive modifications were made from RFC 3920.Corrected the ABNF syntax to (1) ensure consistency with and , and (2) prevent zero-length localparts, domainparts, and resourceparts.To avoid confusion with the term "node" as used in and , changed the term "node identifier" to "localpart" (but retained the name "Nodeprep" for backward compatibility).To avoid confusion with the terms "resource" and "identifier" as used in , changed the term "resource identifier" to "resourcepart".Corrected the nameprep processing rules to require use of the UseSTD3ASCIIRules flag.Regarding this entire document or any portion of it, the author makes no guarantees and is not responsible for any damage resulting from its use. The author grants irrevocable permission to anyone to use, modify, and distribute it in any way that does not diminish the rights of anyone else to use, modify, and distribute it, provided that redistributed derivative works do not contain misleading author or version information. Derivative works need not be licensed under similar terms.