Sortix
Sortix Download Manual Development Source Code News Blog More
current nightly

Sortix volatile manual

This manual documents Sortix volatile, a development build that has not been officially released. You can instead view this document in the latest official manual.

NAME

CMS_get0_type, CMS_get_version, CMS_set1_eContentType, CMS_get0_eContentType, CMS_get0_content — get and set CMS content types and content

SYNOPSIS

#include <openssl/cms.h>
const ASN1_OBJECT *
CMS_get0_type(const CMS_ContentInfo *cms);
int
CMS_get_version(const CMS_ContentInfo *cms, long *version);
int
CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid);
const ASN1_OBJECT *
CMS_get0_eContentType(CMS_ContentInfo *cms);
ASN1_OCTET_STRING **
CMS_get0_content(CMS_ContentInfo *cms);

DESCRIPTION

CMS_get0_type() returns the content type of the ContentInfo structure cms. The ASN1_OBJECT value returned can be converted to an integer NID value using OBJ_obj2nid(3). The following content types are identified by the following NIDs:
SignedData NID_pkcs7_signed
EnvelopedData NID_pkcs7_enveloped
DigestedData NID_pkcs7_digest
EncryptedData NID_pkcs7_encrypted
AuthenticatedData NID_id_smime_ct_authData
CompressedData NID_id_smime_ct_compressedData
arbitrary data NID_pkcs7_data
The SignedData, DigestedData, AuthenticatedData, and CompressedData types contain a field encapContentInfo to allow embedding content, and EnvelopedData and EncryptedData contain a field encryptedContentInfo for that purpose. The type of the embedded content to be stored in that field can be set with the function CMS_set1_eContentType(), to be called on cms structures returned from functions such as CMS_sign(3) or CMS_encrypt(3) with the CMS_PARTIAL flag set and before the structure is finalised; otherwise the results are undefined. CMS_set1_eContentType() copies the supplied oid, so it should be freed up after use.
CMS_get_version() sets *version to the syntax version number of the ContentInfo structure cms. The version is a number between 0 and 5 and is defined for all the above content types except for arbitrary data. For arbitrary data and unsupported content types CMS_get_version() fails and the content of *version is unspecified.
CMS_get0_eContentType() returns the type of the embedded content.
CMS_get0_content() returns a pointer to the storage location where the pointer to the embedded content is stored. That means that for example after
ASN1_OCTET_STRING **pconf = CMS_get0_content(cms);
*pconf could be NULL if there is no embedded content. Applications can access, modify or create the embedded content in a CMS_ContentInfo structure using this function. Applications usually will not need to modify the embedded content as it is normally set by higher level functions.

RETURN VALUES

CMS_get0_type() and CMS_get0_eContentType() return internal pointers to OBJECT IDENTIFIER structures.
CMS_get_version() returns 1 on success and 0 on failure.
CMS_get0_content() returns an internal pointer to the storage location where the pointer to the embedded content is stored.
CMS_set1_eContentType() returns 1 for success or 0 if an error occurred. The error can be obtained from ERR_get_error(3).

SEE ALSO

CMS_ContentInfo_new(3), d2i_CMS_ContentInfo(3), SMIME_read_CMS(3)

STANDARDS

RFC 5652: Cryptographic Message Syntax
RFC 3274: Compressed Data Content Type for Cryptographic Message Syntax (CMS)

HISTORY

These functions first appeared in OpenSSL 0.9.8h and have been available since OpenBSD 6.7.
CMS_get_version() first appeared in OpenBSD 7.4.
Copyright 2011-2025 Jonas 'Sortie' Termansen and contributors.
Sortix's source code is free software under the ISC license.
#sortix on irc.sortix.org
@sortix_org