CMS_FINAL(3ossl)

πŸ“¦
version 15.1 Β· 3 versions
, in freebsd 15.1

πŸ’… CMS_FINAL(3ossl) β€” the OpenSSL one, bestie

Okay so this is CMS_final / CMS_final_digest from OpenSSL, living their best life in section 3ossl of the manual. Buckle up, we're finalising CMS structures and it's honestly iconic.


✨ NAME ✨

CMS_final, CMS_final_digest β€” finalise a CMS_ContentInfo structure. Like, wrap it up, put a bow on it, done. πŸŽ€


🌸 SYNOPSIS 🌸

#include <openssl/cms.h>

int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, unsigned int flags);
int CMS_final_digest(CMS_ContentInfo *cms, const unsigned char *md,
                     unsigned int mdlen, BIO *dcont, unsigned int flags);

Copy those signatures exactly, bestie β€” no cap, character for character. πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

CMS_final() is the one that finalises the structure cms. Its whole vibe? Do whatever operations are necessary on cms (digest computation, for example) and set the appropriate fields. Main character energy, honestly.

  • The parameter data contains the content to be processed. That's the material, the moment, the substance. ✨
  • The parameter dcont contains a BIO to write content to after processing. Heads up though: this is only used with detached data and will usually be set to NULL. So like, usually it's just vibing as NULL, iykyk.

CMS_final_digest() finalises the structure cms using a pre-computed digest, rather than computing the digest from the original data. Lowkey the shortcut of the two β€” someone already did the digest math, you're just handing it over. 🫢


πŸ’œ NOTES πŸ’œ

These functions will normally be called when the CMS_PARTIAL flag is used. Key detail: it should only be used when streaming is not performed, because the streaming I/O functions perform finalisation operations internally. So don't double up β€” the streaming functions already handle the finalise, and doing it twice is not the slay you think it is. πŸ’€

Now the important bit β€” to sign a pre-computed digest, CMS_sign(3) or CMS_sign_ex() is called with the data parameter set to NULL before the CMS structure is finalised with the digest provided to CMS_final_digest() in binary form.

⚠️ Real talk: when signing a pre-computed digest, the security relies on the digest and its computation from the original message being trusted. Like, fully trusted. That's a big deal, so don't sleep on it. πŸ”₯

πŸ“ RETURN VALUES πŸ“

  • CMS_final() and CMS_final_digest() return 1 for success.
  • They return 0 for failure.

That's it. Binary. One or zero. No in-between, no situationships. πŸ’…


🌈 SEE ALSO 🌈

Go read those too, bestie β€” they're all part of the same friend group. 🫢


⭐ HISTORY ⭐

CMS_final_digest() was added in OpenSSL 3.2. The new girl on the block, and she ate. πŸ‘‘


Copyright 2008-2022 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>.


🌸 mwah, that's a wrap 🌸 β€” this lil page is from OpenSSL 3.5.6, dated 2026-04-07, and it's the CMS_FINAL(3ossl) man page. Literally iconic of it. πŸ’–

πŸ“¦ where this page comes from