CMS_GET0_TYPE(3) | Library Functions Manual | CMS_GET0_TYPE(3)

# 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

library “libcrypto”
`#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.

June 8, 2025 | Debian