O tipo de conteúdo mais comum é o SignedData: o conteúdo (ou apenas uma referência a ele, no caso de assinaturas desanexadas), os certificados dos signatários e um SignerInfo por signatário. Um SignerInfo costuma incluir atributos assinados — no mínimo o tipo de conteúdo e o messageDigest do conteúdo, muitas vezes o horário da assinatura —, e a assinatura é calculada sobre a codificação DER desses atributos, e não diretamente sobre o conteúdo.
O EnvelopedData criptografa o conteúdo para os destinatários com um mecanismo por destinatário: transporte de chaves (RSA), acordo de chaves (ECDH) ou, desde a RFC 9629, KEMs como o ML-KEM (RFC 9936). O AuthEnvelopedData acrescenta a criptografia do conteúdo com AEAD (RFC 5083). Os rótulos PEM são PKCS7 e CMS.
A maioria das falhas de verificação vem de detalhes: conteúdo desanexado que não é idêntico, byte a byte, ao que foi assinado (finais de linha no S/MIME), uma cadeia de certificados ausente, atributos assinados recodificados com outra ordenação de SET OF ou um algoritmo de digest que o verificador não aceita mais. O openssl cms -verify e o verificador de S/MIME mostram qual etapa falhou.