From fff8af46ac88307060ab4cbdda99dab49bfa1728 Mon Sep 17 00:00:00 2001 From: schwarze <> Date: Tue, 3 Jan 2017 20:15:47 +0000 Subject: Document ASN1_TYPE_new(3) and ASN1_TYPE_free(3), even though OpenSSL does not document them. By being in , they are public, and it makes no sense to document accessors but not document constructors and destructors. Improve the one-line description. Mention various missing details. Many wording improvements. Add some cross references. --- src/lib/libcrypto/man/ASN1_TYPE_get.3 | 134 ++++++++++++++++++++++++++-------- src/lib/libcrypto/man/ASN1_item_new.3 | 6 +- 2 files changed, 106 insertions(+), 34 deletions(-) (limited to 'src/lib') diff --git a/src/lib/libcrypto/man/ASN1_TYPE_get.3 b/src/lib/libcrypto/man/ASN1_TYPE_get.3 index 5531e572d1..47ea1cdfc6 100644 --- a/src/lib/libcrypto/man/ASN1_TYPE_get.3 +++ b/src/lib/libcrypto/man/ASN1_TYPE_get.3 @@ -1,7 +1,24 @@ -.\" $OpenBSD: ASN1_TYPE_get.3,v 1.2 2016/11/12 19:23:16 jmc Exp $ +.\" $OpenBSD: ASN1_TYPE_get.3,v 1.3 2017/01/03 20:15:47 schwarze Exp $ .\" OpenSSL 99d63d46 Mon Jun 6 00:43:05 2016 -0400 .\" -.\" This file was written by Dr. Stephen Henson . +.\" This file is a derived work. +.\" The changes are covered by the following Copyright and license: +.\" +.\" Copyright (c) 2017 Ingo Schwarze +.\" +.\" Permission to use, copy, modify, and distribute this software for any +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +.\" +.\" The original file was written by Dr. Stephen Henson . .\" Copyright (c) 2015, 2016 The OpenSSL Project. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without @@ -48,17 +65,23 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED .\" OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: November 12 2016 $ +.Dd $Mdocdate: January 3 2017 $ .Dt ASN1_TYPE_GET 3 .Os .Sh NAME +.Nm ASN1_TYPE_new , +.Nm ASN1_TYPE_free , .Nm ASN1_TYPE_get , .Nm ASN1_TYPE_set , .Nm ASN1_TYPE_set1 , .Nm ASN1_TYPE_cmp -.Nd ASN1_TYPE utility functions +.Nd ASN.1 objects of arbitrary type .Sh SYNOPSIS .In openssl/asn1.h +.Ft ASN1_TYPE * +.Fn ASN1_TYPE_new void +.Ft void +.Fn ASN1_TYPE_free "ASN1_TYPE *a" .Ft int .Fo ASN1_TYPE_get .Fa "ASN1_TYPE *a" @@ -81,20 +104,41 @@ .Fa "ASN1_TYPE *b" .Fc .Sh DESCRIPTION -These functions manipulate .Vt ASN1_TYPE -structures. +represents the ASN.1 ANY type. An .Vt ASN1_TYPE -structure can contain any ASN.1 type or constructed type such as a -SEQUENCE: it is effectively equivalent to the ASN.1 ANY type. +object can store an ASN.1 value of arbitrary type, +including constructed types such as a SEQUENCE. +It also remembers internally which type it currently holds. +.Pp +.Fn ASN1_TYPE_new +allocates and initializes an empty +.Vt ASN1_TYPE +object of undefined type. +.Pp +.Fn ASN1_TYPE_free +frees +.Fa a +including the value stored in it, if any. +If +.Fa a +is a +.Dv NULL +pointer, no action occurs. .Pp .Fn ASN1_TYPE_get returns the type of -.Fa a . +.Fa a , +represented by one of the +.Dv V_ASN1_* +constants defined in +.In openssl/asn1.h . .Pp .Fn ASN1_TYPE_set -sets the value of +frees the value contained in +.Fa a , +if any, and sets .Fa a to .Fa type @@ -107,28 +151,28 @@ internally so it must be freed up after the call. .Pp .Fn ASN1_TYPE_set1 -sets the value of +sets the type of .Fa a to .Fa type -and a copy of +and its value to a copy of .Fa value . -.Pp -.Fn ASN1_TYPE_cmp -compares ASN.1 types +If copying succeeds, the previous value that was contained in .Fa a -and -.Fa b . +is freed. +If copying fails, +.Fa a +remains unchanged. .Pp The type and meaning of the .Fa value -parameter for +argument of .Fn ASN1_TYPE_set and .Fn ASN1_TYPE_set1 is determined by the .Fa type -parameter. +argument. If .Fa type is @@ -173,19 +217,26 @@ contains the entire ASN.1 encoding verbatim, including tag and length octets. .Pp .Fn ASN1_TYPE_cmp -may not return zero if two types are equivalent but have different -encodings. -For example the single content octet of the boolean TRUE value under BER -can have any non-zero encoding but +checks that +.Fa a +and +.Fa b +have the same type, the same value, and are encoded in the same way. +.Pp +If the types agree and the values have the same meaning but are +encoded differently, they are considered different. +For example, a boolean value is represented +using a single content octet. +Under BER, any non-zero octet represents the TRUE value, but .Fn ASN1_TYPE_cmp -will only return zero if the values are the same. +will only report a match if the content octet is the same. .Pp -If either or both of the parameters passed to +If either or both of the arguments passed to .Fn ASN1_TYPE_cmp is .Dv NULL , -the return value is non-zero. -Technically, if both parameters are +the result is a mismatch. +Technically, if both arguments are .Dv NULL , the two types could be absent OPTIONAL fields and so should match, however passing @@ -198,13 +249,32 @@ for types which do match. So applications should handle the case of two absent values separately. .Sh RETURN VALUES -.Fn ASN1_TYPE_get -returns the type of the +.Fn ASN1_TYPE_new +returns the new .Vt ASN1_TYPE -argument. +object or +.Dv NULL +if an error occurs. +.Pp +.Fn ASN1_TYPE_get +returns the type of +.Fa a +or 0 if an error occurs. +The latter can happen if +.Fa a +does not contain a value even though its type is not +.Dv V_ASN1_NULL . +For example, it will always happen for empty objects +newly constructed with +.Fn ASN1_TYPE_new . .Pp .Fn ASN1_TYPE_set1 -returns 1 for success or 0 for failure. +returns 1 if the copying succeeds or 0 if it fails. .Pp .Fn ASN1_TYPE_cmp -returns 0 if the types are identical or non-zero otherwise. +returns 0 for a match or non-zero for a mismatch. +.Sh SEE ALSO +.Xr ASN1_item_free 3 , +.Xr ASN1_STRING_dup 3 , +.Xr d2i_ASN1_TYPE 3 , +.Xr OBJ_dup 3 diff --git a/src/lib/libcrypto/man/ASN1_item_new.3 b/src/lib/libcrypto/man/ASN1_item_new.3 index 0444bbe15a..e679815751 100644 --- a/src/lib/libcrypto/man/ASN1_item_new.3 +++ b/src/lib/libcrypto/man/ASN1_item_new.3 @@ -1,4 +1,4 @@ -.\" $OpenBSD: ASN1_item_new.3,v 1.1 2016/12/24 21:42:29 schwarze Exp $ +.\" $OpenBSD: ASN1_item_new.3,v 1.2 2017/01/03 20:15:47 schwarze Exp $ .\" .\" Copyright (c) 2016 Ingo Schwarze .\" @@ -14,7 +14,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: December 24 2016 $ +.Dd $Mdocdate: January 3 2017 $ .Dt ASN1_ITEM_NEW 3 .Os .Sh NAME @@ -95,6 +95,8 @@ object or if an error occurs. .Sh SEE ALSO .Xr ASN1_item_d2i 3 , +.Xr ASN1_TYPE_new 3 , +.Xr d2i_ASN1_NULL 3 , .Xr OBJ_nid2obj 3 .Sh BUGS The -- cgit v1.2.3-55-g6feb