aboutsummaryrefslogtreecommitdiff
path: root/secure/lib/libcrypto/man/man3/ASN1_EXTERN_FUNCS.3
diff options
context:
space:
mode:
Diffstat (limited to 'secure/lib/libcrypto/man/man3/ASN1_EXTERN_FUNCS.3')
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_EXTERN_FUNCS.3224
1 files changed, 224 insertions, 0 deletions
diff --git a/secure/lib/libcrypto/man/man3/ASN1_EXTERN_FUNCS.3 b/secure/lib/libcrypto/man/man3/ASN1_EXTERN_FUNCS.3
new file mode 100644
index 000000000000..775dc556d513
--- /dev/null
+++ b/secure/lib/libcrypto/man/man3/ASN1_EXTERN_FUNCS.3
@@ -0,0 +1,224 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
+.\" ========================================================================
+.\"
+.IX Title "ASN1_EXTERN_FUNCS 3ossl"
+.TH ASN1_EXTERN_FUNCS 3ossl 2026-04-07 3.5.6 OpenSSL
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+ASN1_EXTERN_FUNCS, ASN1_ex_d2i, ASN1_ex_d2i_ex, ASN1_ex_i2d, ASN1_ex_new_func,
+ASN1_ex_new_ex_func, ASN1_ex_free_func, ASN1_ex_print_func,
+IMPLEMENT_EXTERN_ASN1
+\&\- ASN.1 external function support
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/asn1t.h>
+\&
+\& typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
+\& const ASN1_ITEM *it, int tag, int aclass, char opt,
+\& ASN1_TLC *ctx);
+\& typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len,
+\& const ASN1_ITEM *it, int tag, int aclass, char opt,
+\& ASN1_TLC *ctx, OSSL_LIB_CTX *libctx,
+\& const char *propq);
+\& typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out,
+\& const ASN1_ITEM *it, int tag, int aclass);
+\& typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
+\& typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it,
+\& OSSL_LIB_CTX *libctx, const char *propq);
+\& typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
+\& typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval,
+\& int indent, const char *fname,
+\& const ASN1_PCTX *pctx);
+\&
+\& struct ASN1_EXTERN_FUNCS_st {
+\& void *app_data;
+\& ASN1_ex_new_func *asn1_ex_new;
+\& ASN1_ex_free_func *asn1_ex_free;
+\& ASN1_ex_free_func *asn1_ex_clear;
+\& ASN1_ex_d2i *asn1_ex_d2i;
+\& ASN1_ex_i2d *asn1_ex_i2d;
+\& ASN1_ex_print_func *asn1_ex_print;
+\& ASN1_ex_new_ex_func *asn1_ex_new_ex;
+\& ASN1_ex_d2i_ex *asn1_ex_d2i_ex;
+\& };
+\& typedef struct ASN1_EXTERN_FUNCS_st ASN1_EXTERN_FUNCS;
+\&
+\& #define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs)
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+ASN.1 data structures templates are typically defined in OpenSSL using a series
+of macros such as \fBASN1_SEQUENCE()\fR, \fBASN1_SEQUENCE_END()\fR and so on. Instead
+templates can also be defined based entirely on external functions. These
+external functions are called to perform operations such as creating a new
+\&\fBASN1_VALUE\fR or converting an \fBASN1_VALUE\fR to or from DER encoding.
+.PP
+The macro \fBIMPLEMENT_EXTERN_ASN1()\fR can be used to create such an externally
+defined structure. The name of the structure should be supplied in the \fIsname\fR
+parameter. The tag for the structure (e.g. typically \fBV_ASN1_SEQUENCE\fR) should
+be supplied in the \fItag\fR parameter. Finally a pointer to an
+\&\fBASN1_EXTERN_FUNCS\fR structure should be supplied in the \fIfptrs\fR parameter.
+.PP
+The \fBASN1_EXTERN_FUNCS\fR structure has the following entries.
+.IP \fIapp_data\fR 4
+.IX Item "app_data"
+A pointer to arbitrary application specific data.
+.IP \fIasn1_ex_new\fR 4
+.IX Item "asn1_ex_new"
+A "new" function responsible for constructing a new \fBASN1_VALUE\fR object. The
+newly constructed value should be stored in \fI*pval\fR. The \fIit\fR parameter is a
+pointer to the \fBASN1_ITEM\fR template object created via the
+\&\fBIMPLEMENT_EXTERN_ASN1()\fR macro.
+.Sp
+Returns a positive value on success or 0 on error.
+.IP \fIasn1_ex_free\fR 4
+.IX Item "asn1_ex_free"
+A "free" function responsible for freeing the \fBASN1_VALUE\fR passed in \fI*pval\fR
+that was previously allocated via a "new" function. The \fIit\fR parameter is a
+pointer to the \fBASN1_ITEM\fR template object created via the
+\&\fBIMPLEMENT_EXTERN_ASN1()\fR macro.
+.IP \fIasn1_ex_clear\fR 4
+.IX Item "asn1_ex_clear"
+A "clear" function responsible for clearing any data in the \fBASN1_VALUE\fR passed
+in \fI*pval\fR and making it suitable for reuse. The \fIit\fR parameter is a pointer
+to the \fBASN1_ITEM\fR template object created via the \fBIMPLEMENT_EXTERN_ASN1()\fR
+macro.
+.IP \fIasn1_ex_d2i\fR 4
+.IX Item "asn1_ex_d2i"
+A "d2i" function responsible for converting DER data with the tag \fItag\fR and
+class \fIclass\fR into an \fBASN1_VALUE\fR. If \fI*pval\fR is non\-NULL then the
+\&\fBASN_VALUE\fR it points to should be reused. Otherwise a new \fBASN1_VALUE\fR
+should be allocated and stored in \fI*pval\fR. \fI*in\fR points to the DER data to be
+decoded and \fIlen\fR is the length of that data. After decoding \fI*in\fR should be
+updated to point at the next byte after the decoded data. If the \fBASN1_VALUE\fR
+is considered optional in this context then \fIopt\fR will be nonzero. Otherwise
+it will be zero. The \fIit\fR parameter is a pointer to the \fBASN1_ITEM\fR template
+object created via the \fBIMPLEMENT_EXTERN_ASN1()\fR macro. A pointer to the current
+\&\fBASN1_TLC\fR context (which may be required for other ASN1 function calls) is
+passed in the \fIctx\fR parameter.
+.Sp
+The \fIasn1_ex_d2i\fR entry may be NULL if \fIasn1_ex_d2i_ex\fR has been specified
+instead.
+.Sp
+Returns <= 0 on error or a positive value on success.
+.IP \fIasn1_ex_i2d\fR 4
+.IX Item "asn1_ex_i2d"
+An "i2d" function responsible for converting an \fBASN1_VALUE\fR into DER encoding.
+On entry \fI*pval\fR will contain the \fBASN1_VALUE\fR to be encoded. If default
+tagging is to be used then \fItag\fR will be \-1 on entry. Otherwise if implicit
+tagging should be used then \fItag\fR and \fIaclass\fR will be the tag and associated
+class.
+.Sp
+If \fIout\fR is not NULL then this function should write the DER encoded data to
+the buffer in \fI*out\fR, and then increment \fI*out\fR to point to immediately after
+the data just written.
+.Sp
+If \fIout\fR is NULL then no data should be written but the length calculated and
+returned as if it were.
+.Sp
+The \fIasn1_ex_i2d\fR entry may be NULL if \fIasn1_ex_i2d_ex\fR has been specified
+instead.
+.Sp
+The return value should be negative if a fatal error occurred, or 0 if a
+non\-fatal error occurred. Otherwise it should return the length of the encoded
+data.
+.IP \fIasn1_ex_print\fR 4
+.IX Item "asn1_ex_print"
+A "print" function. \fIout\fR is the BIO to print the output to. \fI*pval\fR is the
+\&\fBASN1_VALUE\fR to be printed. \fIindent\fR is the number of spaces of indenting to
+be printed before any data is printed. \fIfname\fR is currently unused and is
+always "". \fIpctx\fR is a pointer to the \fBASN1_PCTX\fR for the print operation.
+.Sp
+Returns 0 on error or a positive value on success. If the return value is 2 then
+an additional newline will be printed after the data printed by this function.
+.IP \fIasn1_ex_new_ex\fR 4
+.IX Item "asn1_ex_new_ex"
+This is the same as \fIasn1_ex_new\fR except that it is additionally passed the
+OSSL_LIB_CTX to be used in \fIlibctx\fR and any property query string to be used
+for algorithm fetching in the \fIpropq\fR parameter. See
+"ALGORITHM FETCHING" in \fBcrypto\fR\|(7) for further details. If \fIasn1_ex_new_ex\fR is
+non NULL, then it will always be called in preference to \fIasn1_ex_new\fR.
+.IP \fIasn1_ex_d2i_ex\fR 4
+.IX Item "asn1_ex_d2i_ex"
+This is the same as \fIasn1_ex_d2i\fR except that it is additionally passed the
+OSSL_LIB_CTX to be used in \fIlibctx\fR and any property query string to be used
+for algorithm fetching in the \fIpropq\fR parameter. See
+"ALGORITHM FETCHING" in \fBcrypto\fR\|(7) for further details. If \fIasn1_ex_d2i_ex\fR is
+non NULL, then it will always be called in preference to \fIasn1_ex_d2i\fR.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+Return values for the various callbacks are as described above.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fBASN1_item_new_ex\fR\|(3)
+.SH HISTORY
+.IX Header "HISTORY"
+The \fIasn1_ex_new_ex\fR and \fIasn1_ex_d2i_ex\fR callbacks were added in OpenSSL 3.0.
+.SH COPYRIGHT
+.IX Header "COPYRIGHT"
+Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+.PP
+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
+<https://www.openssl.org/source/license.html>.