Back to Devexpress

PackageSignatureValidation Class

officefileapi-devexpress-dot-office-dot-digitalsignatures-0b0a7064.md

latest8.3 KB
Original Source

PackageSignatureValidation Class

Contains the validation information.

Namespace : DevExpress.Office.DigitalSignatures

Assembly : DevExpress.Docs.v25.2.dll

NuGet Package : DevExpress.Document.Processor

Declaration

csharp
public class PackageSignatureValidation
vb
Public Class PackageSignatureValidation

The following members return PackageSignatureValidation objects:

Remarks

Check the PackageSignatureValidation.Result and PackageSignatureValidation.ResultMessage properties to determine whether the signature is valid.

Note

Make sure that the signature certificate is registered on your machine. Otherwise, the signature is invalid.

If the document is not signed, the PackageSignatureValidation.Result property returns SignaturesNotFound.

If the document to be validated is encrypted, specify the SignatureValidationOptions.DecryptionPassword property to decrypt the document. Otherwise, the Result property returns PackageSignatureValidationResult.PackageOpenFailed.

If the PackageSignatureValidation.Result property returns Invalid or PartiallyValid, check the PackageSignatureValidation.Items property to obtain a list of items with detailed validation information. The number of SignatureValidationInfo objects in the list is equal to the number of signatures.

The table below lists API used to obtain information:

PropertyDescription
SignatureValidationInfo.PassedChecksReturns verification types the signature passed.
SignatureValidationInfo.PassedCheckDetailsObtains information about passed verifications.
SignatureValidationInfo.FailedChecksReturns verification types the signature did not pass.
SignatureValidationInfo.FailedCheckDetailsRetrieves information about failed verifications.
SignatureValidationInfo.CheckDetailsGets information about all verifications.

The code sample below validates signatures in a DOCX and XLSX document, checks the result, and displays information in the console:

csharp
using DevExpress.Office.DigitalSignatures;
using System.Diagnostics;
using System.Net;

static void Main(string[] args)
{
    ValidateSignature("Template_signed.docx");
    ValidateSignature("Template_signed.xlsx");
}

private static void ValidateSignature(string path)
{
    DocumentSigner validator = new DocumentSigner();

    //In this example, certificate validation is skipped
    SignatureValidationOptions validationOptions = new SignatureValidationOptions();
    validationOptions.ValidationFlags = ~ValidationFlags.ValidateSignatureCertificate & ~ValidationFlags.ValidateTimestampCertificate;

    //Validate the signature:
    PackageSignatureValidation signatureValidation = validator.Validate(path, validationOptions);
    AnalyzeValidationResult(signatureValidation);        

}

private static void AnalyzeValidationResult(PackageSignatureValidation signatureValidation)
{
    string validationMessage = signatureValidation.ResultMessage;

    //Check validation result and show information in the console:
    switch (signatureValidation.Result)
    {
        case PackageSignatureValidationResult.Valid:
            Console.WriteLine(validationMessage); Console.ReadKey();
            Process.Start(output);
            break;

        case PackageSignatureValidationResult.SignaturesNotFound:
            Console.WriteLine(validationMessage);
            break;

        case PackageSignatureValidationResult.Invalid:
        case PackageSignatureValidationResult.PartiallyValid:
            var failedCheckDetails = signatureValidation.Items[0].FailedCheckDetails;
            Console.WriteLine(validationMessage);
            int i = 1;
            foreach (SignatureCheckResult checkResult in failedCheckDetails)
            {
                Console.WriteLine(String.Format("Validation details {0}: \r\n" +
                    "{1} failed, Info: {2} \r\n", i, checkResult.CheckType, checkResult.Info));
                i++;
            }
            Console.ReadKey();
            break;
    }
}
vb
Imports Microsoft.VisualBasic
Imports DevExpress.Office.DigitalSignatures
Imports System.Diagnostics
Imports System.Net

Shared Sub Main(ByVal args() As String)
  ValidateSignature("Template_signed.docx")
  ValidateSignature("Template_signed.xlsx")
End Sub

Private Shared Sub ValidateSignature(ByVal path As String)
  Dim validator As New DocumentSigner()

  'In this example, certificate validation is skipped
  Dim validationOptions As New SignatureValidationOptions()
  validationOptions.ValidationFlags = (Not ValidationFlags.ValidateSignatureCertificate) And Not ValidationFlags.ValidateTimestampCertificate

  'Validate the signature:
  Dim signatureValidation As PackageSignatureValidation = validator.Validate(path, validationOptions)
  Dim validationMessage As String = signatureValidation.ResultMessage

  'Check the validation result:
  Select Case signatureValidation.Result
    Case PackageSignatureValidationResult.Valid
      Console.WriteLine(validationMessage)
      Console.ReadKey()
      Process.Start(path)

    Case PackageSignatureValidationResult.SignaturesNotFound
      Console.WriteLine(validationMessage)

    Case PackageSignatureValidationResult.Invalid, PackageSignatureValidationResult.PartiallyValid
      Dim failedCheckDetails = signatureValidation.Items(0).FailedCheckDetails
      Console.WriteLine(validationMessage)
      Dim i As Integer = 1
      For Each checkResult As SignatureCheckResult In failedCheckDetails
        Console.WriteLine(String.Format("Validation details {0}: " & ControlChars.CrLf & "{1} failed, Info: {2} " & ControlChars.CrLf, i, checkResult.CheckType, checkResult.Info))
        i += 1
      Next checkResult
      Console.ReadKey()
  End Select
End Sub

Inheritance

Object PackageSignatureValidation

See Also

PackageSignatureValidation Members

DevExpress.Office.DigitalSignatures Namespace