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()andCMS_get0_eContentType()return anASN1_OBJECTstructure.CMS_set1_eContentType()returns1for success or0if an error occurred. the error can be obtained fromERR_get_error(3).
π SEE ALSO π
π COPYRIGHT π
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
- fedora 43: openssl-devel 1:3.5.9-1.fc43 Β· Apache-2.0
- fedora 43: openssl-devel 1:3.5.9-1.fc43 Β· Apache-2.0
- fedora 44: openssl-devel 1:3.5.9-1.fc44 Β· Apache-2.0
- fedora 44: openssl-devel 1:3.5.9-1.fc44 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms