=pod

=head1 NAME

ASN1_STRING_TABLE, ASN1_STRING_TABLE_add, ASN1_STRING_TABLE_get,
ASN1_STRING_TABLE_cleanup - ASN1_STRING_TABLE manipulation functions

=head1 SYNOPSIS

 #include <openssl/asn1.h>

 typedef struct asn1_string_table_st ASN1_STRING_TABLE;

 int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize,
                           unsigned long mask, unsigned long flags);
 ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid);
 void ASN1_STRING_TABLE_cleanup(void);

=head1 DESCRIPTION

=head2 Types

B<ASN1_STRING_TABLE> is a table which holds string information
(basically minimum size, maximum size, type and etc) for a NID object.

=head2 Functions

ASN1_STRING_TABLE_add() adds a new B<ASN1_STRING_TABLE> item into the
local ASN1 string table based on the I<nid> along with other parameters.

If the item is already in the table, fields of B<ASN1_STRING_TABLE> are
updated (depending on the values of those parameters, e.g., I<minsize>
and I<maxsize> >= 0, I<mask> and I<flags> != 0). If the I<nid> is standard,
a copy of the standard B<ASN1_STRING_TABLE> is created and updated with
other parameters.

ASN1_STRING_TABLE_get() searches for an B<ASN1_STRING_TABLE> item based
on I<nid>. It will search the local table first, then the standard one.

ASN1_STRING_TABLE_cleanup() frees all B<ASN1_STRING_TABLE> items added
by ASN1_STRING_TABLE_add().

=head1 RETURN VALUES

ASN1_STRING_TABLE_add() returns 1 on success, 0 if an error occurred.

ASN1_STRING_TABLE_get() returns a valid B<ASN1_STRING_TABLE> structure
or NULL if nothing is found.

ASN1_STRING_TABLE_cleanup() does not return a value.

=head1 SEE ALSO

L<ERR_get_error(3)>

=head1 COPYRIGHT

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