What’s new in this release
-
[Feature] Image digital signature support and validation (SIGNATURENET‑5528)
Introduces steganography‑based embedding of digital signatures into PNG and JPG images. Supports password‑protected signatures, stream/file handling, and full verification with optional detection thresholds. -
[Enhancement] LINQ queries optimization for signature operations (SIGNATURENET‑5500)
Refactored LINQ logic across the library to reduce memory allocations and improve execution speed. Adds predicate‑based filtering forSearchandVerifymethods, enabling developers to pre‑filter signatures before expensive processing.
Fixes and enhancements
- [Bug Fix] Fixed
GeneratePreview()type initializer exception with DOC format on Linux (SIGNATURENET‑5555)
The exception is no longer thrown when generating previews for Microsoft Word documents on Linux environments.
How to use the new features
Signing an image (steganography)
using GroupDocs.Signature;
using GroupDocs.Signature.Options;
string inputFile = "image.png";
string outputFile = "signed_image.png";
string password = "MySecurePassword123";
using (Signature signature = new Signature(inputFile))
{
ImageDigitalSignOptions signOptions = new ImageDigitalSignOptions
{
Password = password
};
SignResult signResult = signature.Sign(outputFile, signOptions);
if (signResult.Succeeded?.Count > 0)
{
Console.WriteLine("Image signed successfully!");
Console.WriteLine($"Signatures added: {signResult.Succeeded.Count}");
}
}
Verifying a signed image
using GroupDocs.Signature;
using GroupDocs.Signature.Options;
string signedFile = "signed_image.png";
string password = "MySecurePassword123";
using (Signature signature = new Signature(signedFile))
{
ImageDigitalVerifyOptions verifyOptions = new ImageDigitalVerifyOptions
{
Password = password,
DetectionThresholdPercent = 75 // optional, 0‑100%
};
VerificationResult verifyResult = signature.Verify(verifyOptions);
if (verifyResult.IsValid)
{
Console.WriteLine("Digital signature is valid!");
Console.WriteLine($"Verified signatures: {verifyResult.Succeeded.Count}");
}
else
{
Console.WriteLine("Digital signature is invalid or not found.");
}
}
Advanced verification with full data extraction
using (Signature signature = new Signature("signed_image.png"))
{
ImageDigitalVerifyOptions verifyOptions = new ImageDigitalVerifyOptions
{
Password = "MySecurePassword123",
UseFullDataExtraction = true, // maximum accuracy
DetectionThresholdPercent = 85
};
VerificationResult verifyResult = signature.Verify(verifyOptions);
if (verifyResult.IsValid && verifyOptions.DetectedProbability.HasValue)
{
Console.WriteLine($"Signature detected with {verifyOptions.DetectedProbability.Value}% probability");
}
}
LINQ‑optimized search with predicate
using GroupDocs.Signature;
using GroupDocs.Signature.Options;
using GroupDocs.Signature.Domain;
using (Signature signature = new Signature("document.pdf"))
{
List<SearchOptions> searchOptions = new List<SearchOptions>
{
new TextSearchOptions()
};
// Filter only text signatures containing "Approved"
SearchResult result = signature.Search(searchOptions,
sig => sig is TextSignature txt && txt.Text.Contains("Approved"));
foreach (BaseSignature sig in result.Signatures)
{
Console.WriteLine($"Found: {((TextSignature)sig).Text}");
}
}
LINQ‑optimized verify with predicate
using (Signature signature = new Signature("signed_document.pdf"))
{
TextVerifyOptions verifyOptions = new TextVerifyOptions("John Smith");
// Verify only signatures on page 1
List<BaseSignature> result = signature.Verify(verifyOptions,
sig => sig.PageNumber == 1);
Console.WriteLine($"Found {result.Count} verified signatures on page 1");
}
How to get the update
- NuGet – Upgrade to the latest GroupDocs.Signature package:
dotnet add package GroupDocs.Signature --version 25.12 - Direct Download – Grab the compiled assemblies for .NET from the official release page:
GroupDocs.Signature for .NET 25.12 DLLs
Resources
- Full Release Notes – (link to the release notes page, if available)
- Documentation – https://docs.groupdocs.com/signature/net/
- Support Forum – https://forum.groupdocs.com/c/signature/