53 lines
1.8 KiB
VB.net
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
|