123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- Imports System.IO
- Imports ComPDFKit.DigitalSign
- Imports ComPDFKit.Import
- Imports ComPDFKit.PDFAnnotation.Form
- Imports ComPDFKit.PDFDocument
- Imports ComPDFKit.PDFPage
- Module DigitalSignatureTest
- Private parentPath = Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())))
- Private outputPath As String = Path.Combine(parentPath, "Output", "VB")
- Sub Main()
- #Region "Preparation work"
- Console.WriteLine("Running digital signature sample..." & vbCrLf)
- SDKLicenseHelper.LicenseVerify()
- Dim certificatePath As String = "Certificate.pfx"
- Dim password As String = "ComPDFKit"
- If Not Directory.Exists(outputPath) Then
- Directory.CreateDirectory(outputPath)
- End If
- #End Region
- #Region "Sample 0: Create certificate"
- GenerateCertificate()
- #End Region
- #Region "Sample 1: Create digital signature"
- Dim document As CPDFDocument = CPDFDocument.InitWithFilePath("CommonFivePage.pdf")
- CreateDigitalSignature(document, certificatePath, password)
- document.Release()
- #End Region
- #Region "Sample 2: Verify signature"
- Dim signedDoc As CPDFDocument = CPDFDocument.InitWithFilePath("Signed.pdf")
- VerifyDigitalSignature(signedDoc)
- #End Region
- #Region "Sample 3: Verify certificate"
- VerifyCertificate(certificatePath, password)
- #End Region
- #Region "Sample 4: Print digital signature info"
- PrintDigitalSignatureInfo(signedDoc)
- #End Region
- #Region "Sample 5: Trust Certificate"
- TrustCertificate(signedDoc)
- #End Region
- #Region "Sample 6: Remove digital signature"
- RemoveDigitalSignature(signedDoc)
- signedDoc.Release()
- #End Region
- Console.WriteLine("Done!")
- Console.ReadLine()
- End Sub
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Private Sub GenerateCertificate()
- Console.WriteLine("--------------------")
- Console.WriteLine("Generate certificate signature.")
- Dim info As String = "/C=SG/O=ComPDFKit/D=R&D Department/CN=Alan/emailAddress=xxxx@example.com"
- Dim password As String = "ComPDFKit"
- Dim filePath As String = outputPath & "\Certificate.pfx"
- If CPDFPKCS12CertHelper.GeneratePKCS12Cert(info, password, filePath, CPDFCertUsage.CPDFCertUsageAll, True) Then
- Console.WriteLine("File saved in " & filePath)
- Console.WriteLine("Generate PKCS12 certificate done.")
- Else
- Console.WriteLine("Generate PKCS12 certificate failed.")
- End If
- Console.WriteLine("--------------------")
- End Sub
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Private Sub CreateDigitalSignature(document As CPDFDocument, certificatePath As String, password As String)
- Console.WriteLine("--------------------")
- Console.WriteLine("Create digital signature.")
- Dim certificate As CPDFSignatureCertificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path("Certificate.pfx", "ComPDFKit")
- Dim page As CPDFPage = document.PageAtIndex(0)
- Dim signatureField As CPDFSignatureWidget = TryCast(page.CreateWidget(C_WIDGET_TYPE.WIDGET_SIGNATUREFIELDS), CPDFSignatureWidget)
- signatureField.SetRect(New CRect(28, 420, 150, 370))
- signatureField.SetWidgetBorderRGBColor(New Byte() {0, 0, 0})
- signatureField.SetWidgetBgRGBColor(New Byte() {150, 180, 210})
- signatureField.UpdateAp()
- Dim name As String = GetGrantorFromDictionary(certificate.SubjectDict) & vbCrLf
- Dim [date] As String = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss")
- Dim reason As String = "I am the owner of the document."
- Dim location As String = certificate.SubjectDict("C")
- Dim DN As String = certificate.Subject
- Dim signatureConfig As New CPDFSignatureConfig With {
- .Text = GetGrantorFromDictionary(certificate.SubjectDict),
- .Content = "Name: " & name & Environment.NewLine &
- "Date: " & [date] & Environment.NewLine &
- "Reason: " & reason & " " & Environment.NewLine &
- "Location: " & location & Environment.NewLine &
- "DN: " & DN & Environment.NewLine,
- .IsContentAlignLeft = False,
- .IsDrawLogo = True,
- .LogoData = File.ReadAllBytes("logo.png"),
- .TextColor = New Single() {0, 0, 0},
- .ContentColor = New Single() {0, 0, 0}
- }
- Dim filePath As String = outputPath & "\" & document.FileName & "_Signed.pdf"
- signatureField.UpdataApWithSignature(signatureConfig)
- If document.WriteSignatureToFilePath(signatureField,
- filePath,
- certificatePath, password,
- location,
- reason, CPDFSignaturePermissions.CPDFSignaturePermissionsNone) Then
- Console.WriteLine("File saved in " & filePath)
- Console.WriteLine("Create digital signature done.")
- Else
- Console.WriteLine("Create digital signature failed.")
- End If
- Console.WriteLine("--------------------")
- End Sub
-
-
-
-
-
- Private Sub RemoveDigitalSignature(document As CPDFDocument)
- Console.WriteLine("--------------------")
- Console.WriteLine("Remove digital signature.")
- Dim signature As CPDFSignature = document.GetSignatureList()(0)
- document.RemoveSignature(signature, True)
- Dim filePath As String = outputPath & "\" & document.FileName & "_RemovedSign.pdf"
- document.WriteToFilePath(filePath)
- Console.WriteLine("File saved in " & filePath)
- Console.WriteLine("Remove digital signature done.")
- Console.WriteLine("--------------------")
- End Sub
-
-
-
-
-
- Private Sub TrustCertificate(document As CPDFDocument)
- Console.WriteLine("--------------------")
- Console.WriteLine("Trust certificate.")
- Dim signature As CPDFSignature = document.GetSignatureList()(0)
- Dim signatureCertificate As CPDFSignatureCertificate = signature.SignerList(0).CertificateList(0)
- Console.WriteLine("Certificate trusted status: " & signatureCertificate.IsTrusted.ToString())
- Console.WriteLine("---Begin trusted---")
- Dim trustedFolder As String = AppDomain.CurrentDomain.BaseDirectory & "\TrustedFolder\"
- If Not Directory.Exists(trustedFolder) Then
- Directory.CreateDirectory(trustedFolder)
- End If
- CPDFSignature.SignCertTrustedFolder = trustedFolder
- If signatureCertificate.AddToTrustedCertificates() Then
- Console.WriteLine("Certificate trusted status: " & signatureCertificate.IsTrusted.ToString())
- Console.WriteLine("Trust certificate done.")
- Else
- Console.WriteLine("Trust certificate failed.")
- End If
- Console.WriteLine("--------------------")
- End Sub
-
-
-
-
-
-
-
-
-
-
-
-
- Private Sub VerifyCertificate(certificatePath As String, password As String)
- Console.WriteLine("--------------------")
- Console.WriteLine("Verify certificate.")
- Dim certificate As CPDFSignatureCertificate = CPDFPKCS12CertHelper.GetCertificateWithPKCS12Path(certificatePath, password)
- certificate.CheckCertificateIsTrusted()
- If certificate.IsTrusted Then
- Console.WriteLine("Certificate is trusted")
- Else
- Console.WriteLine("Certificate is not trusted")
- End If
- Console.WriteLine("Verify certificate done.")
- Console.WriteLine("--------------------")
- End Sub
-
-
-
-
-
-
-
-
- Private Sub VerifyDigitalSignature(document As CPDFDocument)
- Console.WriteLine("--------------------")
- Console.WriteLine("Verify digital signature.")
- For Each signature As CPDFSignature In document.GetSignatureList()
- signature.VerifySignatureWithDocument(document)
- For Each signer As CPDFSigner In signature.SignerList
- Console.WriteLine("Is the certificate trusted: " & signer.IsCertTrusted.ToString())
- Console.WriteLine("Is the signature verified: " & signer.IsSignVerified.ToString())
- If signer.IsCertTrusted AndAlso signer.IsSignVerified Then
-
-
- ElseIf Not signer.IsCertTrusted AndAlso signer.IsSignVerified Then
-
-
- Else
-
-
- End If
- Next
- Next
- Console.WriteLine("Verify digital signature done.")
- Console.WriteLine("--------------------")
- End Sub
- Public Function GetGrantorFromDictionary(dictionary As Dictionary(Of String, String)) As String
- Dim grantor As String = String.Empty
- dictionary.TryGetValue("CN", grantor)
- If String.IsNullOrEmpty(grantor) Then
- dictionary.TryGetValue("OU", grantor)
- End If
- If String.IsNullOrEmpty(grantor) Then
- dictionary.TryGetValue("O", grantor)
- End If
- If String.IsNullOrEmpty(grantor) Then
- grantor = "Unknown Signer"
- End If
- Return grantor
- End Function
-
-
-
-
-
- Private Sub PrintDigitalSignatureInfo(document As CPDFDocument)
- Console.WriteLine("--------------------")
- Console.WriteLine("Print digital signature info.")
- For Each signature As CPDFSignature In document.GetSignatureList()
- signature.VerifySignatureWithDocument(document)
- Console.WriteLine("Name: " & signature.Name)
- Console.WriteLine("Location: " & signature.Location)
- Console.WriteLine("Reason: " & signature.Reason)
- For Each signer As CPDFSigner In signature.SignerList
- Console.WriteLine("Date: " & signer.AuthenDate)
- For Each certificate As CPDFSignatureCertificate In signer.CertificateList
- Console.WriteLine("Subject: " & certificate.Subject)
- Next
- Next
- Next
- Console.WriteLine("Print digital signature info done.")
- Console.WriteLine("--------------------")
- End Sub
- End Module
|