sgcSign 2026.5 — Authenticode, EU eIDAS Paketi ve 9 İstihdam Profili

· Sürümler

İlk lansmandan yalnızca bir ay sonra, sgcSign 2026.5 kütüphanenin büyük bir genişlemesiyle geliyor. Bu sürüm; Windows ikili dosyaları için Microsoft Authenticode imzalamayı, üç yeni kod dağıtım imzalayıcısını (ClickOnce, NuGet, VSIX), eksiksiz bir EU eIDAS uyumluluk paketini (ASiC kapsayıcıları, LOTL / EUTL güven listesi, Cloud Signature Consortium uzaktan imzalama), dokuz önceden ayarlanmış ülke istihdam profilini, bir Bulgaristan Peppol BIS Billing 3.0 profilini, yerel bir QR Kodu üretecini, ECDSA P-256/384/521 ve RSA-PSS desteğini, tam CI/CD entegrasyonlarını ve kapsamlı bir XAdES / PFX uyumluluk düzeltmeleri kümesini ekler.

Bu yazı, öne çıkan özellikleri her yeni bileşen için kullanıma hazır Delphi kod parçacıklarıyla adım adım anlatır.

Microsoft Authenticode

TsgcAuthenticodeSigner, Windows Portable Executable dosyalarını (.exe, .dll, .sys) Authenticode spesifikasyonuna göre imzalar. İmzalayıcı, PE'yi ayrıştırır, Authenticode algoritmasıyla hashler (sağlama toplamını ve mevcut sertifika tablosunu atlayarak), SPC dolaylı veri içeriğiyle tam bir PKCS#7 SignedData blob'u oluşturur ve bunu ikili dosyanın sertifika tablosuna ekler.

SHA-1'den SHA-512'ye kadar hash'ler desteklenir, RFC 3161 zaman damgaları imzasız öznitelikler olarak gömülür ve AppendSignature := True iç içe imzalar üretir (örneğin eski Windows uyumluluğu için SHA-1 + SHA-256 çift imzalama).

uses
  sgcSign_Authenticode, sgcSign_KeyProvider_PFX, sgcSign_TSAClient;

var
  oSigner: TsgcAuthenticodeSigner;
  oPFX: TsgcPFXKeyProvider;
  oTSA: TsgcTSAClient;
begin
  oPFX := TsgcPFXKeyProvider.Create(nil);
  oPFX.FileName := 'codesign.pfx';
  oPFX.Password := 'secret';

  oTSA := TsgcTSAClient.Create(nil);
  oTSA.URL := 'http://timestamp.digicert.com';

  oSigner := TsgcAuthenticodeSigner.Create(nil);
  try
    oSigner.KeyProvider := oPFX;
    oSigner.TSAClient   := oTSA;
    oSigner.Hash        := ahSHA256;     // ahSHA1 / ahSHA256 / ahSHA384 / ahSHA512
    oSigner.Level       := alT;          // alBES or alT (with timestamp)
    oSigner.Description := 'My Application';
    oSigner.URL         := 'https://www.example.com';
    oSigner.SignFile('MyApp.exe', 'MyApp-signed.exe');
  finally
    oSigner.Free; oTSA.Free; oPFX.Free;
  end;
end;

Doğrulama simetriktir. TsgcAuthenticodeVerifier.Verify; sonucu, hesaplanan ve gömülü hash'leri, imzalayan subject/issuer bilgisini ve bir zaman damgasının bulunup bulunmadığını içeren bir kayıt döndürür:

var
  oVer: TsgcAuthenticodeVerifier;
  oRes: TsgcAuthenticodeVerifyResult;
begin
  oVer := TsgcAuthenticodeVerifier.Create(nil);
  try
    oRes := oVer.Verify('MyApp-signed.exe');
    if oRes.Valid then
      ShowMessage('Signed by ' + oRes.SubjectName)
    else
      ShowMessage('Invalid: ' + oRes.ErrorMessage);
  finally
    oVer.Free;
  end;
end;

Yalnızca hash ile Authenticode imzalama

Büyük CI yapıtları (yükleyiciler, çalışma zamanları, sürücüler) tam PE'yi uzak bir imzalayıcıya yüklemeyi zahmetli hale getirir. Yeni yalnızca hash ile imzalama akışı, istemcinin Authenticode hash'ini yerel olarak hesaplamasına ve sgcSign Sunucusuna yalnızca 32 baytlık özeti göndermesine olanak tanır. Sunucu, ekli olmayan PKCS#7 blob'unu döndürür ve istemci bunu tekrar ikili dosyaya gömer; bu da bant genişliği kısıtlı aracılarda çok megabaytlık yüklemeleri birkaç KB'ye düşürür.

// Local: compute the hash with sgcSign_PE_Hasher, POST it to the server,
// receive the SignedData blob, then append it to the PE's certificate table.
var
  oSigner: TsgcAuthenticodeSigner;
  vHash, vPKCS7: TBytes;
begin
  // vHash := ComputePEHash('MyApp.exe', haSHA256);
  vPKCS7 := oSigner.SignHash(vHash, ahSHA256);
  // EmbedPKCS7IntoPE('MyApp.exe', vPKCS7, 'MyApp-signed.exe');
end;

Aynı işlem, sunucunun POST /api/v1/sign/authenticode/hash uç noktası, sgcsign sign --prehash CLI bayrağı ve .NET SDK'sındaki TsgcSignClient.SignAuthenticodeHashAsync metodu tarafından sunulur.

ClickOnce, NuGet ve VSIX imzalayıcıları

Üç yeni imzalayıcı, Microsoft geliştirici dağıtım ekosistemini kapsar.

TsgcClickOnceSigner, .application dağıtım bildirimlerini ve .exe.manifest uygulama bildirimlerini, Microsoft mage.exe çıktısıyla eşleşecek şekilde enveloped W3C XML-DSig kullanarak imzalar. İmzalayıcı, publisherIdentity düğümünü sertifikanın issuerKeyHash değeriyle yeniden yazar.

uses sgcSign_ClickOnce;

var oCO: TsgcClickOnceSigner;
begin
  oCO := TsgcClickOnceSigner.Create(nil);
  try
    oCO.KeyProvider   := oPFX;
    oCO.Hash          := haSHA256;
    oCO.PublisherName := 'My Company';
    oCO.SignManifestFile('MyApp.application', 'MyApp-signed.application');
  finally
    oCO.Free;
  end;
end;

TsgcNuGetSigner, .nupkg author paketlerini imzalar ve isteğe bağlı bir RFC 3161 karşı imzasıyla bir CMS/PKCS#7 SignedData blob'u (signing certificate v2, commitment-type "proof of origin") üretir.

uses sgcSign_NuGet;

var oNu: TsgcNuGetSigner;
begin
  oNu := TsgcNuGetSigner.Create(nil);
  try
    oNu.KeyProvider := oPFX;
    oNu.TSAClient   := oTSA;
    oNu.Hash        := haSHA256;
    oNu.SignPackageFile('MyLib.1.0.0.nupkg', 'MyLib.1.0.0.signed.nupkg');
  finally
    oNu.Free;
  end;
end;

TsgcVSIXSigner, Visual Studio uzantıları için OPC (Open Packaging Convention) dijital imzalarını uygular; parça başına XML-DSig referanslarını hesaplar ve [Content_Types].xml ile paketin _rels/.rels dosyasını yeniden yazar.

uses sgcSign_VSIX;

var oVX: TsgcVSIXSigner;
begin
  oVX := TsgcVSIXSigner.Create(nil);
  try
    oVX.KeyProvider := oPFX;
    oVX.Hash        := haSHA256;
    oVX.SignPackageFile('MyExt.vsix', 'MyExt-signed.vsix');
  finally
    oVX.Free;
  end;
end;

Üçü de mevcut XAdES / PAdES / CAdES imzalayıcılarıyla aynı IsgcKeyProvider arabirimini yeniden kullanır; böylece fatura imzalama için yapılandırılmış bir AWS KMS, Azure Trusted Signing veya PKCS#11 belirteci, hiçbir ek altyapı olmadan ikili dosya imzalama için yeniden kullanılabilir.

EU eIDAS / uyumluluk paketi

Bu sürüm, eIDAS paketini sunar; birlikte, bir Delphi uygulamasının bir imzayı resmi EU güven çerçevesine karşı doğrulamasına ve uzun vadeli arşivleme kapsayıcıları üretmesine olanak tanıyan üç yeni birim.

ASiC kapsayıcıları (ETSI EN 319 162-1)

sgcSign_ASiC, hem XAdES hem de CAdES türlerinde ASiC-S (tek belge) ve ASiC-E (birden çok belge) kapsayıcıları oluşturur ve ayrıştırır. Çıktı, mimetype girişi en başta olan ve imzanın META-INF/ altına yerleştirildiği deterministik bir ZIP'tir.

uses sgcSign_ASiC;

var
  oDocs: TsgcASiCDocumentArray;
  vBytes: TBytes;
begin
  SetLength(oDocs, 1);
  oDocs[0].Name := 'invoice.xml';
  oDocs[0].Data := TFile.ReadAllBytes('invoice.xml');

  // aSignatureXML comes from TsgcXAdESSigner (detached signature over the doc)
  vBytes := TsgcASiCContainer.BuildXAdES(apASiCE, oDocs, vXAdESSignature);
  TFile.WriteAllBytes('invoice.asice', vBytes);
end;

LOTL / EUTL güven listesi

sgcSign_TrustList, EU List of Trusted Lists'i indirir, Üye Devlet başına güven listesi işaretçilerini izler ve her TSPService girişini ayrıştırır. Sonuç, 31 Üye Devlet genelinde yaklaşık 3.600 hizmetten oluşan bellek içi bir kataloğdur. IsQualifiedAtTime araması, herhangi bir sertifikayı belirli bir imzalama anında "Nitelikli bir TSP tarafından düzenlenmiş" olarak sınıflandırır; bu, eIDAS Madde 25 kapsamında bir imzayı gelişmiş (AdES) seviyesinden nitelikli (QES) seviyesine yükseltmek için gereken işlemdir.

Cloud Signature Consortium (CSC v2)

TsgcCSCKeyProvider, Cloud Signature Consortium API v2 için bir IsgcKeyProvider uygulamasıdır; bu, Buypass, Certinomis, Globalsign EU, InfoCert, Namirial, Trust Pro ve diğer QTSP'ler tarafından kullanılan uzaktan nitelikli imzalama için Avrupa standardıdır. Sağlayıcı; Basic / OAuth2 / OTP kimlik doğrulamasını işler, kullanıcının kimlik bilgilerini listeler, sertifika zincirini getirir ve SAD yetkilendirmesi kullanarak yalnızca hash ile uzaktan imzalama gerçekleştirir.

uses sgcSign_KeyProvider_CSC, sgcSign_XAdES;

var oCSC: TsgcCSCKeyProvider; oX: TsgcXAdESSigner;
begin
  oCSC := TsgcCSCKeyProvider.Create(nil);
  oCSC.BaseURL    := 'https://csc.example-qtsp.eu/csc/v2';
  oCSC.AuthMethod := cscOAuth2;
  oCSC.OAuthClientID     := 'my-client-id';
  oCSC.OAuthClientSecret := 'my-client-secret';
  oCSC.CredentialID      := oCSC.ListCredentials[0];
  oCSC.PIN := '1234';
  oCSC.OTP := '987654';      // pushed via SMS / app
  oCSC.LoadCredentialInfo;

  oX := TsgcXAdESSigner.Create(nil);
  oX.KeyProvider := oCSC;
  oX.Profile     := spEIDAS;
  oX.SignXML(vXML);
end;

Dokuz istihdam profili

Dokuz önceden ayarlanmış profil, Avrupa iş hukuku belgelerini (iş sözleşmeleri, maaş bordroları, devir anlaşmaları) hedefler:

ProfilÜlkeSeviyeC14NTSAOCSP
spEmploymentDEAlmanyaB-LTExclusiveYesYes
spEmploymentITİtalyaB-LTC14N 1.0YesYes
spEmploymentESİspanyaB-TExclusiveYesNo
spEmploymentFRFransaB-TExclusiveYesNo
spEmploymentPLPolonyaB-TExclusiveYesNo
spEmploymentATAvusturyaB-LTExclusiveYesYes
spEmploymentBEBelçikaB-LTExclusiveYesYes
spEmploymentPTPortekizB-LTExclusiveYesYes
spEmploymentNLHollandaB-TExclusiveYesNo

Yeni bir EU_Employment demosu, tüm hattı sunar (imzalama → ASiC-E paketi → LOTL doğrulaması → QTSP sınıflandırması).

Bulgaristan Peppol BIS Billing 3.0

Yeni TsgcProfilePeppolBG profili, Bulgaristan UBL 2.1 faturalarını (BGN para birimi, %20 KDV, BG VAT / EIK, BG IBAN, scheme ID 9926 uç noktası) exclusive C14N ile XAdES B-T seviyesinde imzalar. Delphi ve C++Builder demoları, tamamen doldurulmuş bir fatura şablonu sunar.

uses sgcSign_XAdES, sgcSign_Types;

var oSigner: TsgcXAdESSigner;
begin
  oSigner := TsgcXAdESSigner.Create(nil);
  try
    oSigner.KeyProvider := oPFX;
    oSigner.TSAClient   := oTSA;
    oSigner.Profile     := spPeppolBG;
    oSigner.SignXMLFile('invoice_bg.xml', 'invoice_bg_signed.xml');
  finally
    oSigner.Free;
  end;
end;

CI/CD entegrasyonları

sgcSign Server artık her yaygın hat için birinci sınıf yapıtlar sunuyor:

QR Kodu üreteci

Yazdırılabilir faturada bir QR kodu gerektiren TicketBAI, VeriFactu ve benzeri profiller için, yeni sgcSign_QRCode birimi, byte modunda ISO/IEC 18004'ü uygulayan saf Pascal bir üreteç sunar; dört ECC seviyesinin tümü, 1'den 40'a kadar sürümler, GF(256) Reed-Solomon, tam mask-penalty puanlaması ve bir TBitmap oluşturucusuyla birlikte. Harici DLL yok, lisanslama sürprizleri yok.

uses sgcSign_QRCode, Graphics;

var
  oMatrix: TQRMatrix;
  oBmp: TBitmap;
begin
  oMatrix := GenerateQRCode(
    'https://tbai.eus/QURL/123456789-A?cr=42',
    qrECM);

  oBmp := TBitmap.Create;
  try
    RenderQRMatrix(oMatrix, oBmp, 5, 4);    // 5 px / module, 4-module border
    oBmp.SaveToFile('invoice_qr.bmp');
  finally
    oBmp.Free;
  end;
end;

ECDSA P-256 / P-384 / P-521 ve RSA-PSS

TsgcPEMKeyProvider artık EC özel anahtarlarını Windows BCrypt CNG (ECCPRIVATEBLOB) aracılığıyla içe aktarır ve XML-DSig için ham r||s çıktısıyla imzalar. Yeni bir SignDataPSS metodu, BCRYPT_PAD_PSS kullanarak RSA-PSS imzaları (SHA-256, salt = 32 bayt) üretir; bu, giderek artan sayıda ulusal e-fatura profili tarafından gerekli kılınır.

Doğrulama tarafında, TsgcSignatureVerifier, EC ortak anahtarlarını BCRYPT_ECCPUBLIC_BLOB kaynağından içe aktarır ve hem XAdES SignatureValue hem de ham VerifyData kod yollarında aynı üç eğri için ECDSA imzalarını doğrular.

Bunun çalışması için, TsgcX509Certificate artık KeyUsage uzantısını ayrıştırır ve bunu KeyUsage özelliği ile HasKeyUsageDigitalSignature / HasKeyUsageNonRepudiation yardımcıları aracılığıyla sunar; ayrıca yeni PublicKeyParameters özelliği, ham AlgorithmIdentifier parametreleri TLV'sini (EC sertifikaları için named-curve OID değeri) sunar.

Delphi 7 için WideString aşırı yüklemeleri

ACP olmayan metin geçiren çağıranlar için (Polonya KSeF, Yunanistan myDATA, Bulgaristan Peppol vb.), genel imzalama ve doğrulama API'si artık TsgcXAdESSigner.SignXML, SignXMLDetached, SignXMLEnveloping üzerinde (ve TsgcDocumentSigner ile TsgcSignatureVerifier üzerindeki eşleşen metotlarda) WideString aşırı yüklemeleri sunar. Bu, Delphi 7'de kayıpsız Unicode giriş/çıkışını garanti eder (ACP gidiş dönüşü yok) ve Delphi 2009+ üzerindeki string aşırı yüklemelerine eşdeğerdir.

Uyumluluk ve güvenilirlik düzeltmeleri

2026.5'teki hata düzeltme grubu, canlı vergi otoritesi uç noktalarına karşı ortaya çıkarılan uzun bir XAdES / PFX / doğrulayıcı sorunları listesini kapatır.

Yükseltme

2026.5, mevcut 2026.4 projeleri için yerine doğrudan konabilen bir yükseltmedir. Dikkat edilmesi gereken tek davranışsal değişiklik TsgcDocumentSigner ile ilgilidir: AdES profilleri için düz XML-DSig üretmesine dayanan kod artık doğru şekilde XAdES üretir; vergi otoritelerinin istediği budur, ancak entegrasyon testiniz eski çıktıya sabitlenmişse golden dosyaları yenilemeniz gerekir.

Etkin aboneliği olan müşteriler yeni derlemeyi müşteri alanından indirebilir. Deneme kullanıcıları, güncellenmiş yükleyiciyi esegece.com/products/sgcsign/sgcsign-download adresinden edinebilir.

Sorularınız, geri bildiriminiz veya geçiş yardımı mı gerekiyor? Bize ulaşın — kodu yazan kişilerden bir yanıt alacaksınız.