=pod

=head1 NAME

OSSL_SERIALIZER_CTX,
OSSL_SERIALIZER_CTX_new,
OSSL_SERIALIZER_CTX_get_serializer,
OSSL_SERIALIZER_settable_ctx_params,
OSSL_SERIALIZER_CTX_set_params,
OSSL_SERIALIZER_CTX_free
- Serializer context routines

=head1 SYNOPSIS

 #include <openssl/serializer.h>

 typedef struct ossl_serializer_ctx_st OSSL_SERIALIZER_CTX;

 OSSL_SERIALIZER_CTX *OSSL_SERIALIZER_CTX_new(OSSL_SERIALIZER *ser);
 const OSSL_SERIALIZER *
 OSSL_SERIALIZER_CTX_get_serializer(OSSL_SERIALIZER_CTX *ctx);
 const OSSL_PARAM *OSSL_SERIALIZER_settable_ctx_params(OSSL_SERIALIZER *ser);
 int OSSL_SERIALIZER_CTX_set_params(OSSL_SERIALIZER_CTX *ctx,
                                    const OSSL_PARAM params[]);
 void OSSL_SERIALIZER_CTX_free(OSSL_SERIALIZER_CTX *ctx);

=head1 DESCRIPTION

B<OSSL_SERIALIZER_CTX> is a context with which B<OSSL_SERIALIZER>
operations are performed.  The context typically holds values, both
internal and supplied by the application, which are useful for the
implementations supplied by providers.

OSSL_SERIALIZER_CTX_new() creates a B<OSSL_SERIALIZER_CTX> associated
with the serializer I<ser>.  NULL is a valid I<ser>, the context will
be created anyway, it's just not very useful.  This is intentional, to
distinguish between errors in allocating the context or assigning it
values on one hand, and the lack of serializer support on the other.

=begin comment

The above distinction makes it possible for other routines to sense if
they need to report an error or fall back on other methods to
serialize.

=end comment

OSSL_SERIALIZER_CTX_get_serializer() gets the serializer method
currently associated with the context I<ctx>.

OSSL_SERIALIZER_settable_ctx_params() returns an L<OSSL_PARAM(3)>
array of parameter descriptors.

OSSL_SERIALIZER_CTX_set_params() attempts to set parameters specified
with an L<OSSL_PARAM(3)> array I<params>.  Parameters that the
implementation doesn't recognise should be ignored.

OSSL_SERIALIZER_CTX_free() frees the given context I<ctx>.

=head1 RETURN VALUES

OSSL_SERIALIZER_CTX_new() returns a pointer to a
B<OSSL_SERIALIZER_CTX>, or NULL if the context structure couldn't be
allocated.

OSSL_SERIALIZER_CTX_get_serializer() returns a pointer to the
serializer method associated with I<ctx>.  NULL is a valid return
value and signifies that there is no associated serializer method.

OSSL_SERIALIZER_settable_ctx_params() returns an L<OSSL_PARAM(3)>
array, or NULL if none is available.

OSSL_SERIALIZER_CTX_set_params() returns 1 if all recognised
parameters were valid, or 0 if one of them was invalid or caused some
other failure in the implementation.

=head1 SEE ALSO

L<provider(7)>, L<OSSL_SERIALIZER(3)>

=head1 HISTORY

The functions described here were added in OpenSSL 3.0.

=head1 COPYRIGHT

Copyright 2019 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
