diff --git a/EnvelopeGenerator.Application/Common/Dto/PdfSignOptionsDto.cs b/EnvelopeGenerator.Application/Common/Dto/PdfSignOptionsDto.cs
index 70bf3ac5..104e2537 100644
--- a/EnvelopeGenerator.Application/Common/Dto/PdfSignOptionsDto.cs
+++ b/EnvelopeGenerator.Application/Common/Dto/PdfSignOptionsDto.cs
@@ -10,7 +10,7 @@ public sealed record PdfSignOptionsDto
///
///
///
- public string UUID { get; set; } = null!;
+ public long DocumentElementId { get; set; }
///
///
diff --git a/EnvelopeGenerator.Application/Common/Dto/PdfSignatureCheckResultDto.cs b/EnvelopeGenerator.Application/Common/Dto/PdfSignatureCheckResultDto.cs
index 0c5ba02e..7652ca9e 100644
--- a/EnvelopeGenerator.Application/Common/Dto/PdfSignatureCheckResultDto.cs
+++ b/EnvelopeGenerator.Application/Common/Dto/PdfSignatureCheckResultDto.cs
@@ -47,7 +47,7 @@ public sealed record PdfSignatureCheckItemDto(
string? Filter,
string? SubFilter,
string? ApplicationName,
- string? UUID,
+ long? DocumentElementId,
string? OriginalDocumentSha256,
string? MessageDigestHex,
string? Error);
diff --git a/EnvelopeGenerator.Infrastructure.Crypt/Services/PdfDigitalSignatureService.cs b/EnvelopeGenerator.Infrastructure.Crypt/Services/PdfDigitalSignatureService.cs
index 844fa1e8..e84280f0 100644
--- a/EnvelopeGenerator.Infrastructure.Crypt/Services/PdfDigitalSignatureService.cs
+++ b/EnvelopeGenerator.Infrastructure.Crypt/Services/PdfDigitalSignatureService.cs
@@ -18,7 +18,7 @@ namespace EnvelopeGenerator.Infrastructure.Crypt.Services;
public sealed class PdfDigitalSignatureService(IOptions options) : IPdfDigitalSignatureService
{
- private static readonly Regex SignatureReasonMetaRegex = new(@"\|\s*SFMETA:v1;doc=(?[0-9a-fA-F-]{36});sha256=(?[A-Fa-f0-9]{64})$", RegexOptions.CultureInvariant | RegexOptions.Compiled);
+ private static readonly Regex SignatureReasonMetaRegex = new(@"\|\s*SFMETA:v1;deid=(?\d+);sha256=(?[A-Fa-f0-9]{64})$", RegexOptions.CultureInvariant | RegexOptions.Compiled);
public async Task SignPdfAsync(Stream inputPdf, Stream outputPdf, PdfSignOptionsDto request, Stream? image = null, CancellationToken cancellationToken = default)
{
@@ -34,7 +34,7 @@ public sealed class PdfDigitalSignatureService(IOptions options)
var pkcs11Options = options.Value;
- var reasonWithMeta = BuildReasonWithMeta(request.Reason ?? pkcs11Options.DefaultReason, request.UUID, sourceHashHex);
+ var reasonWithMeta = BuildReasonWithMeta(request.Reason ?? pkcs11Options.DefaultReason, request.DocumentElementId, sourceHashHex);
using var signer = new PdfDocumentSigner(workingInput);
@@ -166,7 +166,7 @@ public sealed class PdfDigitalSignatureService(IOptions options)
Filter: signature.Filter,
SubFilter: signature.SubFilter,
ApplicationName: null,
- UUID: reasonMeta.UUID,
+ DocumentElementId: reasonMeta.DocumentElementId,
OriginalDocumentSha256: reasonMeta.OriginalDocumentSha256,
MessageDigestHex: TryExtractMessageDigestHex(signature.Contents),
Error: null));
@@ -201,7 +201,7 @@ public sealed class PdfDigitalSignatureService(IOptions options)
Filter: signature.Filter,
SubFilter: signature.SubFilter,
ApplicationName: null,
- UUID: reasonMeta.UUID,
+ DocumentElementId: reasonMeta.DocumentElementId,
OriginalDocumentSha256: reasonMeta.OriginalDocumentSha256,
MessageDigestHex: null,
Error: ex.Message));
@@ -492,11 +492,11 @@ public sealed class PdfDigitalSignatureService(IOptions options)
return start + length;
}
- private static string BuildReasonWithMeta(string? businessReason, string uuid, string sourceHashHex)
+ private static string BuildReasonWithMeta(string? businessReason, long documentElementId, string sourceHashHex)
{
var trimmedReason = string.IsNullOrWhiteSpace(businessReason) ? null : businessReason.Trim();
var prefix = string.IsNullOrWhiteSpace(trimmedReason) ? string.Empty : trimmedReason + " ";
- return $"{prefix}| SFMETA:v1;doc={uuid};sha256={sourceHashHex}";
+ return $"{prefix}| SFMETA:v1;deid={documentElementId};sha256={sourceHashHex}";
}
private static string? BuildContactInfo(string? email, string? phone)
@@ -553,7 +553,7 @@ public sealed class PdfDigitalSignatureService(IOptions options)
string.IsNullOrWhiteSpace(phone) ? null : phone);
}
- private static (string? BusinessReason, string? UUID, string? OriginalDocumentSha256) ParseReasonMeta(string? reason)
+ private static (string? BusinessReason, long? DocumentElementId, string? OriginalDocumentSha256) ParseReasonMeta(string? reason)
{
if (string.IsNullOrWhiteSpace(reason))
return (reason, null, null);
@@ -566,9 +566,11 @@ public sealed class PdfDigitalSignatureService(IOptions options)
if (string.IsNullOrWhiteSpace(businessReason))
businessReason = null;
+ long? parsedDocumentElementId = long.TryParse(match.Groups["deid"].Value, out var deid) ? deid : null;
+
return (
businessReason,
- match.Groups["doc"].Value,
+ parsedDocumentElementId,
match.Groups["sha"].Value.ToUpperInvariant());
}
}