CMS 関連の関数は、以下のうちひとつ以上の値をビットフィールドを使って指定することで、フラグを利用します。
| 定数 | 説明 | 
|---|---|
| OPENSSL_CMS_TEXT(int) | 暗号化済み/署名済み のメッセージに対して text/plain のヘッダを追加します。 復号化 または 検証する際に、これらのヘッダは出力から削除されます - もし 複号化済み/検証済み メッセージの MIMEタイプ が text/plain でない場合、エラーが発生します。 | 
| OPENSSL_CMS_BINARY(int) | 通常、入力されるメッセージは
          行末を CRとLFとして用いる
          "canonical" フォーマットに変換されます:
          これは、CMS の仕様です。
          このオプションが指定されると、変換は行われません。
          これは、
          CMS フォーマットではない可能性があるバイナリデータを扱うのに便利です。 | 
| OPENSSL_CMS_NOINTERN(int) | メッセージを検証する際、
          通常は(もしあれば)メッセージに含まれる証明書を
          署名に用いた証明書として探します。
          このオプションを使うと、
          openssl_cms_verify() 関数の untrusted_certificates_filename引数で指定した証明書だけを検証に使うようになります。
          ここで証明書を指定しても、
          それは信頼されない証明書のまま引き続き使われます。 | 
| OPENSSL_CMS_NOVERIFY(int) | 署名されたメッセージの、署名者の証明書を検証しません。 | 
| OPENSSL_CMS_NOCERTS(int) | メッセージに署名する場合、
          通常は署名者の証明書がメッセージに付加されます -
          このオプションを使うと、その証明書を除去できます。
          証明書を除去すると、署名済みのメッセージのサイズが減りますが、
          (たとえば、openssl_cms_verify()
          関数に untrusted_certificates_filenameを使って渡すなどして)
          検証する側が署名者の証明書をローカルに持っておく必要があります。 | 
| OPENSSL_CMS_NOATTR(int) | 通常、メッセージが署名済みの場合、 署名した時刻やサポートされている共通鍵アルゴリズムの情報が含まれる、 一連の属性情報が付加されます。 このオプションを使うと、その属性を含めないようにすることができます。 | 
| OPENSSL_CMS_DETACHED(int) | メッセージに署名する際、
          MIMEタイプ "multipart/signed"を使って、
          平文で署名します。
          これは、openssl_cms_sign()
          で何もflagsを指定しなかったときのデフォルトの動作です。
          このオプションを無効にした場合、メッセージは
          opaque 署名を使って署名されます。
          これは、メールがリレーされる際の変換を防ぐ一方で、
          S/MIME をサポートしていないエージェントでは読めなくなります。 | 
| OPENSSL_CMS_NOSIGS(int) | メッセージの署名を検証しません。 | 
| OPENSSL_CMS_OLDMIMETYPE(int) | PHP 8.3.0 以降で利用可能です。
          メッセージを暗号化する場合に、content-type の値として application/pkcs7-mimeではなくapplication/x-pkcs7-mimeを設定します。 | 
