CMS_GET0_TYPE(3ossl)

πŸ’– CMS_GET0_TYPE πŸ’–

okay bestie, welcome to the OpenSSL CMS content-type corner of the internet ✨ this is CMS_get0_type, CMS_set1_eContentType, CMS_get0_eContentType, and CMS_get0_content β€” aka the girlies that tell you what's inside your CMS blob and let you swap the type around. no cap, it's lowkey iconic πŸŽ€


🌸 NAME 🌸

CMS_get0_type, 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_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() hands you back the content type of a CMS_ContentInfo structure as an ASN1_OBJECT pointer. so then your app can be like "okay, noted" and decide how to actually process that CMS_ContentInfo structure based on the value it got. main character decision-making energy πŸ‘‘

CMS_set1_eContentType() sets the embedded content type of a CMS_ContentInfo structure. it should be called with CMS functions (like CMS_sign(3), CMS_encrypt(3)) with the CMS_PARTIAL flag and before the structure is finalised, otherwise the results are undefined.

🚨 bestie listen. if you call this after the structure is finalised, the results are undefined. we do not do that. periodt.

ASN1_OBJECT *CMS_get0_eContentType() returns a pointer to the embedded content type.

CMS_get0_content() returns a pointer to the ASN1_OCTET_STRING pointer containing the embedded content.


πŸ’€ NOTES πŸ’€

the 0 in the name is giving "I'm not your owner" β€” because CMS_get0_type(), CMS_get0_eContentType() and CMS_get0_content() all return internal pointers which should not be freed up. do not free them. put the free() down πŸ™ˆ

meanwhile CMS_set1_eContentType() copies the supplied OID, and that one should be freed up after use. see the difference? one's a borrow, one's a gift you gotta return πŸŽ€

the ASN1_OBJECT values you get back can be converted to an integer NID value using OBJ_obj2nid(). for the currently supported content types, these are the values that come back:

NID_pkcs7_data
NID_pkcs7_signed
NID_pkcs7_digest
NID_id_smime_ct_compressedData:
NID_pkcs7_encrypted
NID_pkcs7_enveloped

the return value of CMS_get0_content() is a pointer to the ASN1_OCTET_STRING content pointer. so basically, for example:

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. that said, applications usually will not need to modify the embedded content, because it's normally set by higher level functions. so like… you can, but do you need to? probably not bestie πŸ’…


🌈 RETURN VALUES 🌈

  • CMS_get0_type() and CMS_get0_eContentType() return an ASN1_OBJECT structure.
  • 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 πŸ‘‘

ERR_get_error(3)


Copyright 2008-2016 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 <https://www.openssl.org/source/license.html>.


and that's a wrap, babe 🫢 this whole thing is from OpenSSL 3.5.9, dated 2026-09-29, and yeah β€” it lives in the CMS_GET0_TYPE(3ossl) manual page. go forth and read your content types responsibly πŸ’–βœ¨πŸŒΈ

πŸ“¦ where this page comes from