=pod

=head1 NAME

ossl_punycode_decode, ossl_a2ulabel, ossl_a2ucompare
- internal punycode-related functions

=head1 SYNOPSIS

  #include "crypto/punycode.h"

  int ossl_punycode_decode(const char *pEncoded, const size_t enc_len,
                           unsigned int *pDecoded, unsigned int *pout_length);

  int ossl_a2ulabel(const char *in, char *out, size_t *outlen);

  int ossl_a2ucompare(const char *a, const char *u);

=head1 DESCRIPTION

PUNYCODE encoding introduced in RFCs 3490-3492 is widely used for
representation of host names in ASCII-only format. Some specifications,
such as RFC 8398, require comparison of host names encoded in UTF-8 charset.

ossl_a2ulabel() decodes NUL-terminated hostname from PUNYCODE to UTF-8,
using a provided buffer for output.

ossl_a2ucompare() accepts two NUL-terminated hostnames, decodes the 1st
from PUNYCODE to UTF-8 and compares it with the 2nd one as is.

ossl_punycode_decode() decodes one label (one dot-separated part) from
a hostname, with stripped PUNYCODE marker I<xn-->.

=head1 RETURN VALUES

ossl_a2ulabel() returns 1 on success, 0 on not enough buf passed,
-1 on invalid PUNYCODE string passed. When valid string is provided, it sets the
I<*outlen> to the length of required buffer to perform correct decoding.

ossl_a2ucompare() returns 1 on non-equal strings, 0 on equal strings,
-1 when invalid PUNYCODE string passed.

ossl_punycode_decode() returns 1 on success, 0 on error. On success,
*pout_length contains the number of codepoints decoded.

=head1 HISTORY

The functions described here were all added in OpenSSL 3.0.

=head1 COPYRIGHT

Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut

