User:ComputerUserUser/sandbox
GNU Libidn is a free software library that provides support for Internationalized Domain Names (IDNs). It is designed for the encoding and decoding of internationalized domain names according to the Stringprep, Punycode, and IDNA specifications.
Libidn is developed and maintained by Simon Josefsson as part of the GNU Project. The library is written in C, and a portion of the API is also accessible in C++, Emacs Lisp, Python, and Java.
Implementations in Java and C# are provided natively and distributed under the terms of the GNU Lesser General Public License.
History
The library was originally named Libstringprep[1] before becoming a GNU project.
Technical Features
The library contains a generic implementation of Stringprep. Profiles such as Nameprep, iSCSI, XMPP, and Kerberos version 5 are also included. Punycode and ACE (ASCII Compatible Encoding) in the context of an internationalized domain name are supported. A mechanism for defining validation tables for a top-level domain (TLD) and comparing character strings from these tables is included. Default tables for certain TLDs are even included.
Stringprep
The API for Stringprep consists of two functions, "main", the first for converting data from the native representation of a system to UTF-8, and the second for Stringprep processing. This simplifies the use of a Stringprep profile in an application.
Punycode
The Punycode API consists of two functions, one for encoding, and the other for decoding.
IDNA
The IDNA API consists of two encoding functions, the first towards ASCII[2], the second towards Unicode[3], as well as a high-level interface for the conversion between domain names and their ACE (ASCII Compatible Encoding) representation.
TLD
The TLD API includes several functions to extract top-level domain names from a domain represented in character strings, others to locate the appropriate TLD table for use in the relevant top-level domain, others to validate a character string on a TLD table, and several adapter functions to perform all these steps in a single call.
Usage by the GNU Project
GNU Libidn is used by GNU SASL and GNU Shishi to process usernames and passwords.
Notes and References
External Links
Git Repository on GNU Savannah software forge.