=pod

=head1 NAME

ossl_DER_w_boolean, ossl_DER_w_ulong, ossl_DER_w_bn, ossl_DER_w_null,
ossl_DER_w_octet_string, ossl_DER_w_octet_string_uint32
- internal DER writers for DER primitives

=head1 SYNOPSIS

 #include "internal/der.h"

 int ossl_DER_w_boolean(WPACKET *pkt, int tag, int b);
 int ossl_DER_w_ulong(WPACKET *pkt, int tag, unsigned long v);
 int ossl_DER_w_bn(WPACKET *pkt, int tag, const BIGNUM *v);
 int ossl_DER_w_null(WPACKET *pkt, int tag);
 int ossl_DER_w_octet_string(WPACKET *pkt, int tag,
                             const unsigned char *data, size_t data_n);
 int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value);

=head1 DESCRIPTION

All functions described here behave the same way, they prepend
(remember that DER writers are used backwards) the DER encoding of
their respective value to the already written output buffer held by
I<pkt>.

ossl_DER_w_boolean() writes the primitive BOOLEAN using the value I<b>.
Any value that evaluates as true will render a B<true> BOOLEAN,
otherwise a B<false> BOOLEAN.

ossl_DER_w_ulong() and ossl_DER_w_bn() both write the primitive INTEGER using
the value I<v>.

=for comment Other similar functions for diverse C integers should be
added.

ossl_DER_w_null() writes the primitive NULL.

ossl_DER_w_octet_string() writes the primitive OCTET STRING using the bytes
from I<data> with a length of I<data_n>.

ossl_DER_w_octet_string_uint32() writes the primitive OCTET STRING using a
32 bit value in I<value>.

=head1 RETURN VALUES

All the functions return 1 on success and 0 on failure.  Failure may
mean that the buffer held by the I<pkt> is too small, but may also
mean that the values given to the functions are invalid, such as the provided
I<tag> value being too large for the implementation.

=head1 SEE ALSO

L<DERlib(7)>

=head1 COPYRIGHT

Copyright 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
