officefileapi-devexpress-dot-office-dot-digitalsignatures-dot-documentsigner-dot-validate-x28-system-dot-io-dot-stream-devexpress-dot-office-dot-digitalsignatures-dot-signaturevalidationoptions-x29.md
Validates a signature in the specified stream with the specified options.
Namespace : DevExpress.Office.DigitalSignatures
Assembly : DevExpress.Docs.v25.2.dll
NuGet Package : DevExpress.Document.Processor
public PackageSignatureValidation Validate(
Stream inputStream,
SignatureValidationOptions options
)
Public Function Validate(
inputStream As Stream,
options As SignatureValidationOptions
) As PackageSignatureValidation
| Name | Type | Description |
|---|---|---|
| inputStream | Stream |
The stream that contains a file to validate.
| | options | SignatureValidationOptions |
An object that contains signature validation options.
|
| Type | Description |
|---|---|
| PackageSignatureValidation |
An object that contains validation information.
|
The SignatureValidationOptions object allows you to specify signature validation options. Use the SignatureValidationOptions.ValidationFlags property to exclude validation steps.
private static void ValidateSignature(Stream path)
{
DocumentSigner validator = new DocumentSigner();
//Specify validation options
//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 Shared Sub ValidateSignature(ByVal path As Stream)
Dim validator As New DocumentSigner()
'Specify validation options
'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)
AnalyzeValidationResult(signatureValidation)
End Sub
The Validate method returns the PackageSignatureValidation instance that contains validation information. 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:
| Property | Description |
|---|---|
| SignatureValidationInfo.PassedChecks | Returns verification types the signature passed. |
| SignatureValidationInfo.PassedCheckDetails | Obtains information about passed verifications. |
| SignatureValidationInfo.FailedChecks | Returns verification types the signature did not pass. |
| SignatureValidationInfo.FailedCheckDetails | Retrieves information about failed verifications. |
| SignatureValidationInfo.CheckDetails | Gets information about all verifications. |
The code sample below analyzes the validation result and shows information in the console:
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;
}
}
Private Shared Sub AnalyzeValidationResult(ByVal signatureValidation As PackageSignatureValidation)
Dim validationMessage As String = signatureValidation.ResultMessage
'Check validation result and show information in the console:
Select Case signatureValidation.Result
Case PackageSignatureValidationResult.Valid
Console.WriteLine(validationMessage)
Console.ReadKey()
Process.Start(output)
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
See Also