Files
TSpdfUtils/TSPdfUtils/FirmaTiempo.vb
2026-05-27 17:48:50 +02:00

53 lines
1.8 KiB
VB.net

Imports System.IO
Imports Org.BouncyCastle.Pkcs
Imports TSpdf.Bouncycastle.Cert
Imports TSpdf.Bouncycastle.Crypto
Imports TSpdf.Commons.Bouncycastle.Cert
Imports TSpdf.Commons.Bouncycastle.Crypto
Imports TSpdf.Kernel.Pdf
Imports TSpdf.Signatures
Public Class FirmaTiempo
Public Shared Sub SignPdfWithTimestamp(src As String, dest As String, keystorePath As Stream, keystorePassword As String, tsaUrl As String)
Dim reader As New PdfReader(src)
Dim output As New FileStream(dest, FileMode.Create)
Dim signer As New PdfSigner(reader, output, New StampingProperties())
' Se coge los datos del certificado
Dim cpassword = keystorePassword.ToCharArray
Dim [alias] As String = Nothing
Dim pk12 As Pkcs12Store = New Pkcs12Store(keystorePath, cpassword)
For Each a In pk12.Aliases
[alias] = (CType(a, String))
If pk12.IsKeyEntry([alias]) Then
Exit For
End If
Next
Dim pk As IPrivateKey = New PrivateKeyBC(pk12.GetKey([alias]).Key)
Dim pks = New PrivateKeySignature(pk, DigestAlgorithms.SHA256)
Dim ce As X509CertificateEntry() = pk12.GetCertificateChain([alias])
Dim chain = New IX509Certificate(ce.Length - 1) {}
For k As Integer = 0 To ce.Length - 1
chain(k) = New X509CertificateBC(ce(k).Certificate)
Next
Dim externalSignature As IExternalSignature = New PrivateKeySignature(pk, "SHA-256")
' Aqui va la URL del servicio de sellado de tiempo
Dim tsaClient As ITSAClient = New TSAClientBouncyCastle(tsaUrl)
' Se hace la firma con el sellado de tiempo que se le pasa por parámetro
signer.SignDetached(externalSignature, chain, Nothing, Nothing, tsaClient, 0, PdfSigner.CryptoStandard.CADES)
End Sub
End Class