mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
1d39620b34
This library is meant to be small and quick. It's based on WPACKET, which was extended to support DER writing. The way it's used is a bit unusual, as it's used to write the structures backward into a given buffer. A typical quick call looks like this: /* * Fill in this structure: * * something ::= SEQUENCE { * id OBJECT IDENTIFIER, * x [0] INTEGER OPTIONAL, * y [1] BOOLEAN OPTIONAL, * n INTEGER * } */ unsigned char buf[nnnn], *p = NULL; size_t encoded_len = 0; WPACKET pkt; int ok; ok = WPACKET_init_der(&pkt, buf, sizeof(buf) && DER_w_start_sequence(&pkt, -1) && DER_w_bn(&pkt, -1, bn) && DER_w_boolean(&pkt, 1, bool) && DER_w_precompiled(&pkt, -1, OID, sizeof(OID)) && DER_w_end_sequence(&pkt, -1) && WPACKET_finish(&pkt) && WPACKET_get_total_written(&pkt, &encoded_len) && (p = WPACKET_get_curr(&pkt)) != NULL; Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/11450)
57 lines
1.6 KiB
Plaintext
57 lines
1.6 KiB
Plaintext
=pod
|
|
|
|
=head1 NAME
|
|
|
|
DER_w_boolean, DER_w_ulong, DER_w_bn, DER_w_null
|
|
- internal DER writers for DER primitives
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
#include "internal/der.h"
|
|
|
|
int DER_w_boolean(WPACKET *pkt, int tag, int b);
|
|
int DER_w_ulong(WPACKET *pkt, int tag, unsigned long v);
|
|
int DER_w_bn(WPACKET *pkt, int tag, const BIGNUM *v);
|
|
int DER_w_null(WPACKET *pkt, int tag);
|
|
|
|
=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>.
|
|
|
|
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.
|
|
|
|
DER_w_ulong() and 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.
|
|
|
|
DER_w_null() writes the primitive NULL.
|
|
|
|
=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
|