Пример #1
0
QMailCryptoFwd::SignatureResult QMailCryptoSMIME::sign(QMailMessagePartContainer &part,
                                                       const QStringList &keys) const
{
    QByteArray signedData, micalg;
    QMailCryptoFwd::SignatureResult result;
    result = computeSignature(part, keys, signedData, micalg);
    if (result != QMailCryptoFwd::SignatureValid)
        return result;

    // Set it to multipart/signed content-type.
    QList<QMailMessageHeaderField::ParameterType> parameters;
    parameters << QMailMessageHeaderField::ParameterType("micalg", micalg);
    parameters << QMailMessageHeaderField::ParameterType("protocol", "application/pkcs7-signature");
    part.setMultipartType(QMailMessagePartContainerFwd::MultipartSigned, parameters);

    // Write the signature data in the second part.
    QMailMessagePart &signature = part.partAt(1);
    QMailMessageContentDisposition disposition;
    disposition.setType(QMailMessageContentDispositionFwd::Attachment);
    disposition.setFilename("smime.p7s");
    signature.setContentDisposition(disposition);
    signature.setBody(QMailMessageBody::fromData(signedData,
                                                 QMailMessageContentType("application/pkcs7-signature"),
                                                 QMailMessageBodyFwd::Base64));

    return QMailCryptoFwd::SignatureValid;
}
Пример #2
0
bool QMailCryptoSMIME::partHasSignature(const QMailMessagePartContainer &part) const
{
    if (part.multipartType() != QMailMessagePartContainerFwd::MultipartSigned ||
        part.partCount() != 2)
        return false;

    const QMailMessagePart signature = part.partAt(1);

    if (!signature.contentType().matches("application", "pkcs7-signature") &&
        !signature.contentType().matches("application", "x-pkcs7-signature"))
        return false;

    return true;
}
Пример #3
0
QMailCryptoFwd::VerificationResult QMailCryptoSMIME::verifySignature(const QMailMessagePartContainer &part) const
{
    if (!partHasSignature(part))
        return QMailCryptoFwd::VerificationResult(QMailCryptoFwd::MissingSignature);

    QMailMessagePart body = part.partAt(0);
    QMailMessagePart signature = part.partAt(1);

    if (!body.contentAvailable() ||
        !signature.contentAvailable())
        return QMailCryptoFwd::VerificationResult();

    QMailCryptoFwd::VerificationResult result;
    result.engine = QStringLiteral("libsmime.so");
    result.summary = verify(signature.body().data(QMailMessageBodyFwd::Decoded),
                            body.undecodedData(), result.keyResults);
    return result;
}
QString EmailMessageListModel::bodyPlainText(const QMailMessage &mailMsg) const
{
    QMailMessagePartContainer *container = (QMailMessagePartContainer *)&mailMsg;
    QMailMessageContentType contentType = container->contentType();
    if (container->hasBody() && contentType.type().toLower() == "text" &&
            contentType.subType().toLower() == "plain")
    {
        return container->body().data();

    }

    QString text("");
    for ( uint i = 0; i < container->partCount(); i++ )
    {
        QMailMessagePart messagePart = container->partAt(i);

        contentType = messagePart.contentType();
        if (messagePart.hasBody() && contentType.type().toLower() == "text" &&
                contentType.subType().toLower() == "plain")
        {
            text += messagePart.body().data() + "\n";
        }
        QMailMessagePart subPart;
        for (uint j = 0; j < messagePart.partCount(); j++)
        {
            subPart = messagePart.partAt(j);
            contentType = subPart.contentType();
            if (subPart.hasBody() && contentType.type().toLower() == "text" &&
                    contentType.subType().toLower() == "plain")
                text += subPart.body().data() + "\n";
        }
    }
    return text;
}