/// <summary> /// Decrypt (optionally) the given message and try to extract signatures /// </summary> bool DecryptSignatures(IncomingMessage message, X509Certificate2 certificate, out SignedCms signatures, out MimeEntity payload) { MimeEntity decryptedEntity = null; signatures = null; payload = null; if (certificate != null) { decryptedEntity = m_cryptographer.DecryptEntity(message.GetEncryptedBytes(m_cryptographer), certificate); } else { decryptedEntity = message.Message; } if (decryptedEntity == null) { return(false); } if (SMIMEStandard.IsContentEnvelopedSignature(decryptedEntity.ParsedContentType)) { signatures = m_cryptographer.DeserializeEnvelopedSignature(decryptedEntity); payload = MimeSerializer.Default.Deserialize <MimeEntity>(signatures.ContentInfo.Content); } else if (SMIMEStandard.IsContentMultipartSignature(decryptedEntity.ParsedContentType)) { SignedEntity signedEntity = SignedEntity.Load(decryptedEntity); signatures = m_cryptographer.DeserializeDetachedSignature(signedEntity); payload = signedEntity.Content; } else { throw new AgentException(AgentError.UnsignedMessage); } return(true); }
/// <summary> /// Transforms a <see cref="SignedEntity"/> to the associated <see cref="SignedCms"/> instance. /// SignedCms is in PKCS#7 format. /// </summary> /// <param name="entity">The <see cref="SignedEntity"/> to deserialize</param> /// <returns>The corresponding <see cref="SignedCms"/></returns> public SignedCms DeserializeDetachedSignature(SignedEntity entity) { return(m_innerSoftwareCryptographer.DeserializeDetachedSignature(entity)); }