=pod

=begin comment

Copyright 2005 Nokia. All rights reserved.

The portions of the attached software ("Contribution") is developed by
Nokia Corporation and is licensed pursuant to the OpenSSL open source
license.

The Contribution, originally written by Mika Kousa and Pasi Eronen of
Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
support (see RFC 4279) to OpenSSL.

No patent licenses or other rights except those expressly stated in
the OpenSSL open source license shall be deemed granted or received
expressly, by implication, estoppel, or otherwise.

No assurances are provided by Nokia that the Contribution does not
infringe the patent or other intellectual property rights of any third
party or that the license provides you with all the necessary rights
to make use of the Contribution.

THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
OTHERWISE.

=end comment

=head1 NAME

SSL_get_psk_identity, SSL_get_psk_identity_hint - get PSK client identity and hint


=head1 SYNOPSIS

 #include <openssl/ssl.h>

 const char *SSL_get_psk_identity_hint(const SSL *ssl);
 const char *SSL_get_psk_identity(const SSL *ssl);


=head1 DESCRIPTION

SSL_get_psk_identity_hint() is used to retrieve the PSK identity hint
used during the connection setup related to SSL object
B<ssl>. Similarly, SSL_get_psk_identity() is used to retrieve the PSK
identity used during the connection setup.


=head1 RETURN VALUES

If non-B<NULL>, SSL_get_psk_identity_hint() returns the PSK identity
hint and SSL_get_psk_identity() returns the PSK identity. Both are
B<NULL>-terminated. SSL_get_psk_identity_hint() may return B<NULL> if
no PSK identity hint was used during the connection setup.

Note that the return value is valid only during the lifetime of the
SSL object B<ssl>.

=cut
