CMS_GET0_TYPE(3)
hey bestie π welcome to CMS_GET0_TYPE(3) from the Library Functions Manual. this page is your group-chat explainer for getting and setting CMS content types and content, and honestly it's giving "crypto plumbing but make it iconic." let's go π«Ά
β¨ 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 β¨
okay so CMS_get0_type() returns the content type of the ContentInfo structure cms. the ASN1_OBJECT value it returns can be converted to an integer NID value using OBJ_obj2nid(3). here's the NID match-up, no cap:
SignedDataβNID_pkcs7_signedEnvelopedDataβNID_pkcs7_envelopedDigestedDataβNID_pkcs7_digestEncryptedDataβNID_pkcs7_encryptedAuthenticatedDataβNID_id_smime_ct_authDataCompressedDataβ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()andCMS_get0_eContentType()β return internal pointers to OBJECT IDENTIFIER structures.CMS_get_version()β returns1on success and0on failure.CMS_get0_content()β returns an internal pointer to the storage location where the pointer to the embedded content is stored.CMS_set1_eContentType()β returns1for success or0if an error occurred. the error can be obtained fromERR_get_error(3).
β¨ SEE ALSO β¨
β¨ STANDARDS β¨
RFC 5652: Cryptographic Message SyntaxRFC 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. β
xoxo, this page came from the Debian build, dated July 27, 2023, in the CMS_GET0_TYPE(3) / Library Functions Manual corner of the universe π«Άβ¨
π¦ where this page comes from
- opensuse-leap 16.0: libressl-devel-doc 4.1.0-bp160.1.1 Β· OpenSSL
- Copyright (c) 2019 Ingo Schwarze <schwarze@openbsd.org>
- Copyright (c) 2008, 2015 The OpenSSL Project. All rights reserved
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms