--- /dev/null
+.\" $OpenBSD: EVP_PKEY_asn1_get_count.3,v 1.1 2018/02/15 12:09:55 schwarze Exp $
+.\" full merge up to: OpenSSL 751148e2 Oct 27 00:11:11 2017 +0200
+.\"
+.\" This file was written by Richard Levitte <levitte@openssl.org>.
+.\" Copyright (c) 2017 The OpenSSL Project. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\"
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\"
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in
+.\" the documentation and/or other materials provided with the
+.\" distribution.
+.\"
+.\" 3. All advertising materials mentioning features or use of this
+.\" software must display the following acknowledgment:
+.\" "This product includes software developed by the OpenSSL Project
+.\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+.\"
+.\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+.\" endorse or promote products derived from this software without
+.\" prior written permission. For written permission, please contact
+.\" openssl-core@openssl.org.
+.\"
+.\" 5. Products derived from this software may not be called "OpenSSL"
+.\" nor may "OpenSSL" appear in their names without prior written
+.\" permission of the OpenSSL Project.
+.\"
+.\" 6. Redistributions of any form whatsoever must retain the following
+.\" acknowledgment:
+.\" "This product includes software developed by the OpenSSL Project
+.\" for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+.\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+.\" OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd $Mdocdate: February 15 2018 $
+.Dt EVP_PKEY_ASN1_GET_COUNT 3
+.Os
+.Sh NAME
+.Nm EVP_PKEY_asn1_get_count ,
+.Nm EVP_PKEY_asn1_get0 ,
+.Nm EVP_PKEY_asn1_find ,
+.Nm EVP_PKEY_asn1_find_str ,
+.Nm EVP_PKEY_asn1_get0_info
+.Nd enumerate public key ASN.1 methods
+.Sh SYNOPSIS
+.In openssl/evp.h
+.Ft int
+.Fn EVP_PKEY_asn1_get_count void
+.Ft const EVP_PKEY_ASN1_METHOD *
+.Fo EVP_PKEY_asn1_get0
+.Fa "int idx"
+.Fc
+.Ft const EVP_PKEY_ASN1_METHOD *
+.Fo EVP_PKEY_asn1_find
+.Fa "ENGINE **pe"
+.Fa "int type"
+.Fc
+.Ft const EVP_PKEY_ASN1_METHOD *
+.Fo EVP_PKEY_asn1_find_str
+.Fa "ENGINE **pe"
+.Fa "const char *str"
+.Fa "int len"
+.Fc
+.Ft int
+.Fo EVP_PKEY_asn1_get0_info
+.Fa "int *ppkey_id"
+.Fa "int *pkey_base_id"
+.Fa "int *ppkey_flags"
+.Fa "const char **pinfo"
+.Fa "const char **ppem_str"
+.Fa "const EVP_PKEY_ASN1_METHOD *ameth"
+.Fc
+.Sh DESCRIPTION
+.Fn EVP_PKEY_asn1_get_count
+returns a count of the number of public key ASN.1 methods available.
+It includes standard methods and any methods added by the application.
+.Pp
+.Fn EVP_PKEY_asn1_get0
+returns the public key ASN.1 method
+.Fa idx .
+The value of
+.Fa idx
+must be in the range from zero to
+.Fn EVP_PKEY_asn1_get_count
+\- 1.
+.Pp
+.Fn EVP_PKEY_asn1_find
+looks up the method with NID
+.Fa type .
+If
+.Fa pe
+is not
+.Dv NULL ,
+it first looks for an engine implementing a method for the NID
+.Fa type .
+If one is found,
+.Pf * Fa pe
+is set to that engine and the method from that engine is returned instead.
+.Pp
+.Fn EVP_PKEY_asn1_find_str
+looks up the method with PEM type string
+.Fa str .
+Just like
+.Fn EVP_PKEY_asn1_find ,
+if
+.Fa pe
+is not
+.Dv NULL ,
+methods from engines are preferred.
+.Pp
+.Fn EVP_PKEY_asn1_get0_info
+retrieves the public key ID, the base public key ID (both NIDs), any flags,
+the method description and the PEM type string associated with the public
+key ASN.1 method
+.Sy *ameth .
+.Pp
+.Fn EVP_PKEY_asn1_get_count ,
+.Fn EVP_PKEY_asn1_get0 ,
+.Fn EVP_PKEY_asn1_find
+and
+.Fn EVP_PKEY_asn1_find_str
+are not thread safe, but as long as all
+.Vt EVP_PKEY_ASN1_METHOD
+objects are added before the application gets threaded, using them is
+safe.
+See
+.Xr EVP_PKEY_asn1_add0 3 .
+.Sh RETURN VALUES
+.Fn EVP_PKEY_asn1_get_count
+returns the number of available public key methods.
+.Pp
+.Fn EVP_PKEY_asn1_get0
+returns a public key method or
+.Dv NULL
+if
+.Fa idx
+is out of range.
+.Pp
+.Fn EVP_PKEY_asn1_get0_info
+returns 1 on success or 0 on failure.
+.Sh SEE ALSO
+.Xr EVP_PKEY_asn1_add0 3 ,
+.Xr EVP_PKEY_asn1_new 3