Le type de contenu le plus courant est SignedData : le contenu (ou seulement une référence à celui-ci, pour les signatures détachées), les certificats des signataires et un SignerInfo par signataire. Un SignerInfo comprend généralement des attributs signés (au moins le type de contenu et le messageDigest du contenu, souvent une heure de signature), et la signature est calculée sur l’encodage DER de ces attributs, et non directement sur le contenu.
EnvelopedData chiffre le contenu pour des destinataires au moyen, pour chacun d’eux, d’un transport de clé (RSA), d’un accord de clé (ECDH) ou, depuis la RFC 9629, de KEM comme ML-KEM (RFC 9936). AuthEnvelopedData ajoute le chiffrement AEAD du contenu (RFC 5083). Les libellés PEM sont PKCS7 et CMS.
La plupart des échecs de vérification tiennent à des détails : un contenu détaché qui n’est pas identique octet pour octet à ce qui a été signé (fins de ligne en S/MIME), une chaîne de certificats manquante, des attributs signés réencodés avec un autre ordre de SET OF, ou un algorithme de condensat que le vérificateur n’accepte plus. openssl cms -verify et le vérificateur S/MIME indiquent quelle étape a échoué.