CMS_FINAL(3ossl)
π 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
datacontains the content to be processed. That's the material, the moment, the substance. β¨ - The parameter
dcontcontains aBIOto write content to after processing. Heads up though: this is only used with detached data and will usually be set toNULL. So like, usually it's just vibing asNULL, 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()andCMS_final_digest()return1for success.- They return
0for 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 π
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
- freebsd 15.1: base 15.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms