Sfoglia il codice sorgente

compdfkit(win) - 验证签名信息

weixiangjie 1 anno fa
parent
commit
613ed4414d

+ 27 - 0
Demo/Examples/Compdfkit_Tools/Common/Helper/CommonHelper.cs

@@ -65,6 +65,33 @@ namespace Compdfkit_Tools.Helper
             return Regex.IsMatch(email, emailPattern);
         }
 
+        public static string GetExactDateFromString(string dateString)
+        {
+            DateTime dateTime = GetDateTimeFromString(dateString);
+            return dateTime.ToString("yyyy/MM/dd HH:mm:ss");
+        }
+
+        public static DateTime GetDateTimeFromString(string dateString)
+        {
+            int start = 0;
+            for (int i = 0; i < dateString.Length; i++)
+            {
+                if (char.IsNumber(dateString[i]))
+                {
+                    start = i;
+                    break;
+                }
+            }
+            string date = dateString.Substring(start, 14);
+            string year = date.Substring(0, 4);
+            string month = date.Substring(4, 2);
+            string day = date.Substring(6, 2);
+            string hour = date.Substring(8, 2);
+            string minute = date.Substring(10, 2);
+            string second = date.Substring(12, 2);
+            return new DateTime(int.Parse(year), int.Parse(month), int.Parse(day), int.Parse(hour), int.Parse(minute), int.Parse(second));
+        }
+        
         /// <summary>
         /// Returns the file size based on the specified file path, with the smallest unit being bytes (B).
         /// </summary>

+ 2 - 2
Demo/Examples/Compdfkit_Tools/DigitalSignature/VerifyDigitalSignatureControl/DigitalSignatureInfoControl.xaml

@@ -47,7 +47,7 @@
                 </Viewbox>
             </Border>
         </Grid>
-        <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding SignerInfo}"></TextBlock>
-        <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding TimeInfo}"></TextBlock>
+        <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding SignerInfo}" FontSize="16" FontFamily="Segoe UI" Foreground="#43474D"></TextBlock>
+        <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding TimeInfo}" FontSize="14" FontFamily="Segoe UI" Foreground="#43474D"></TextBlock>
     </Grid>
 </UserControl>

+ 49 - 0
Demo/Examples/Compdfkit_Tools/DigitalSignature/VerifyDigitalSignatureControl/DigitalSignatureInfoControl.xaml.cs

@@ -1,9 +1,12 @@
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.Linq;
 using System.Runtime.CompilerServices;
 using System.Windows;
 using System.Windows.Controls;
+using Compdfkit_Tools.Helper;
 using Compdfkit_Tools.PDFControl;
+using ComPDFKit.DigitalSign;
 
 namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
 {
@@ -39,6 +42,52 @@ namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
             DataContext = this;
         }
         
+        public void InitWithSignature(CPDFSignature signature)
+        {
+            string validity;
+            string signerName;
+            string email;
+            string time;
+            
+            if(signature == null)
+                return;
+            SignatureStatus status;
+            CPDFSigner signer = signature.SignerList.Last();
+            bool isTrusted = signer.IsCertTrusted;
+            bool isVerified = signer.IsSignVerified;
+            if (isTrusted && isVerified)
+            {
+                status = SignatureStatus.Valid;
+                validity = "Valid Signature";
+            }
+            else if (!isTrusted && isVerified)
+            {
+                status = SignatureStatus.Unknown;
+                validity = "Unknown Signature";
+            }
+            else
+            {
+                status = SignatureStatus.Invalid;
+                validity = "Invalid Signature";
+            }
+            Status = status;
+
+            signerName = signature.Name;
+            email = DictionaryValueConverter.GetEmailFormDictionary(signature.SignerList.Last().CertificateList.Last().SubjectDict);
+            time = signature.Date;
+            SignerInfo = validity + ",Signed by" + "\"" + signerName;
+            if (!string.IsNullOrEmpty(email))
+            {
+                SignerInfo += "<" + email + ">" + "\"";
+            }
+            else
+            {
+                SignerInfo += "\"";
+            }
+
+            TimeInfo = "Signature Time:" + CommonHelper.GetExactDateFromString(time);
+        }
+        
         private void SetStatus(SignatureStatus status)
         {
             ValidBorder.Visibility = Visibility.Collapsed;

+ 1 - 1
Demo/Examples/Compdfkit_Tools/DigitalSignature/VerifyDigitalSignatureControl/DigitalSignatureValiditySummaaryControl.xaml

@@ -11,7 +11,7 @@
             <TextBlock Text="Validity Summary" FontWeight="Bold" FontSize="14" FontFamily="Segoe UI"></TextBlock>
         </Grid>
         <Border Grid.Row="0" Margin="12" BorderBrush="#CCCCCC" BorderThickness="1">
-            <TextBlock Margin="10" Text="{Binding ValiditySummaryString}" Width="448"></TextBlock>
+            <TextBlock Margin="10" Text="{Binding ValiditySummaryString}" Width="448" TextWrapping="Wrap"></TextBlock>
         </Border>
     </Grid>
 

+ 50 - 0
Demo/Examples/Compdfkit_Tools/DigitalSignature/VerifyDigitalSignatureControl/DigitalSignatureValiditySummaaryControl.xaml.cs

@@ -1,7 +1,11 @@
+using System;
 using System.Collections.Specialized;
 using System.ComponentModel;
+using System.Linq;
 using System.Runtime.CompilerServices;
 using System.Windows.Controls;
+using Compdfkit_Tools.Helper;
+using ComPDFKit.DigitalSign;
 
 namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
 {
@@ -19,6 +23,52 @@ namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
             DataContext = this;
         }
 
+        public void InitWithSignature(CPDFSignature signature)
+        {
+            bool isSignVerified = signature.SignerList.Last().IsSignVerified;
+            bool isCertTrusted = signature.SignerList.Last().IsCertTrusted;
+            bool isDocModified = signature.ModifyInfoList.Count > 0;
+            bool isExpired = DateTime.Now >
+            CommonHelper.GetDateTimeFromString(signature.SignerList.Last().CertificateList.Last().ValidityEnds);
+            
+            string validitySummaryString = "";
+            if (isCertTrusted)
+            {
+                validitySummaryString += "The signer's identity is valid.\n\n";
+            }
+            else
+            {
+                validitySummaryString += "The signer's identity is invalid.\n\n";
+            }
+
+            if (isSignVerified && isCertTrusted)
+            {
+                validitySummaryString += "The signature is valid.\n\n";
+            }
+            else if(isSignVerified && !isCertTrusted)
+            {
+                validitySummaryString += "Signature validity is unknown because it has not been included in your list of trusted certificates and none of its parent certificates are trusted certificates.\n\n";
+            }
+            else if(!isSignVerified && !isCertTrusted)
+            {
+                validitySummaryString += "The signature is invalid.\n\n";
+            }
+            if(isExpired)
+            {
+                validitySummaryString += "The file was signed with a certificate that has expired. If you acquired this file recently, it may not be authentic.\n\n";
+            }
+
+            if (!isDocModified)
+            {
+                validitySummaryString += "The document has not been modified since this signature was applied.\n";
+            }
+            else
+            {
+                validitySummaryString += "The document has been altered or corrupted since it was signed by the current user.\n";
+            }
+            ValiditySummaryString = validitySummaryString;
+        }
+
         public event PropertyChangedEventHandler PropertyChanged;
 
         protected void UpdateProper<T>(ref T properValue,

+ 5 - 6
Demo/Examples/Compdfkit_Tools/DigitalSignature/VerifyDigitalSignatureControl/VerifyDigitalSignatureControl.xaml

@@ -5,7 +5,7 @@
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:local="clr-namespace:Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl"
         mc:Ignorable="d"
-        Title="VerifyDigitalSignatureControl" Height="626" Width="552">
+        Title="VerifyDigitalSignatureControl" Height="450" Width="552">
     <Grid>
         <Grid.RowDefinitions>
             <RowDefinition Height="Auto"></RowDefinition>
@@ -14,10 +14,9 @@
             <RowDefinition Height="Auto"></RowDefinition>
         </Grid.RowDefinitions>
         
-        <local:DigitalSignatureInfoControl Height="52" Margin="0,70,0,10"></local:DigitalSignatureInfoControl>
-        <local:DigitalSignatureValiditySummaaryControl Grid.Row="1" Height="239" Margin="0,10,0,10"></local:DigitalSignatureValiditySummaaryControl>
-        <local:SignerInfoControl Grid.Row="2" Height="147" Margin="0,10,0,10"></local:SignerInfoControl>
-        <Button Grid.Row="3" Height="32" Width="112" HorizontalAlignment="Right" Content="Close" Margin="10" FontSize="14" FontFamily="Segoe UI"></Button>
-
+        <local:DigitalSignatureInfoControl x:Name="DigitalSignatureInfoControl" Height="52" Margin="0,30,0,10"></local:DigitalSignatureInfoControl>
+        <local:DigitalSignatureValiditySummaaryControl x:Name="DigitalSignatureValiditySummaryControl" Grid.Row="1" Height="239" Margin="0,10,0,10"></local:DigitalSignatureValiditySummaaryControl>
+        
+        <Button Grid.Row="3" Height="32" Width="158" HorizontalAlignment="Right" Content="View singer certificates" Margin="12" Click="ViewCertificates_OnClick" FontSize="14" FontFamily="Segoe UI"></Button>
     </Grid>
 </Window>

+ 13 - 1
Demo/Examples/Compdfkit_Tools/DigitalSignature/VerifyDigitalSignatureControl/VerifyDigitalSignatureControl.xaml.cs

@@ -1,10 +1,13 @@
 using System.Windows;
+using Compdfkit_Tools.PDFControl;
 using ComPDFKit.DigitalSign;
 
 namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
 {
     public partial class VerifyDigitalSignatureControl : Window
     {
+        private CPDFSignature signature;
+        
         public VerifyDigitalSignatureControl()
         {
             InitializeComponent();
@@ -12,7 +15,16 @@ namespace Compdfkit_Tools.DigitalSignature.VerifyDigitalSignatureControl
 
         public void InitWithSignature(CPDFSignature signature)
         {
-            
+            DigitalSignatureInfoControl.InitWithSignature(signature);
+            DigitalSignatureValiditySummaryControl.InitWithSignature(signature);
+            this.signature = signature;
+        }
+
+        private void ViewCertificates_OnClick(object sender, RoutedEventArgs e)
+        {
+            ViewCertificateDialog dialog = new ViewCertificateDialog();
+            dialog.Show();
+            dialog.InitCertificateList(signature);
         }
     }
 }

+ 3 - 2
Demo/Examples/Compdfkit_Tools/DigitalSignature/ViewCertificationControl/CertificateDetailControl.xaml.cs

@@ -14,6 +14,7 @@ using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
+using Compdfkit_Tools.Helper;
 using ComPDFKit.DigitalSign;
 
 namespace Compdfkit_Tools.PDFControl
@@ -186,8 +187,8 @@ namespace Compdfkit_Tools.PDFControl
             Subject = certificate.Subject;
             Issuer = certificate.Issuer;
             SerialNumber = certificate.SerialNumber;
-            validityFrom = certificate.ValidityStarts;
-            ValidityTo = certificate.ValidityEnds;
+            ValidityFrom = CommonHelper.GetExactDateFromString(certificate.ValidityStarts);
+            ValidityTo = CommonHelper.GetExactDateFromString(certificate.ValidityEnds);
             CertificatePolicy = certificatePolicyText;
             CrlDistributionPoint = crlDistributionPointText;
             X509Data = certificate.X509Data;

+ 3 - 1
Demo/Examples/Compdfkit_Tools/DigitalSignature/ViewCertificationControl/SummaryControl.xaml.cs

@@ -14,6 +14,7 @@ using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
+using Compdfkit_Tools.Helper;
 using ComPDFKit.DigitalSign;
 
 namespace Compdfkit_Tools.PDFControl
@@ -88,7 +89,8 @@ namespace Compdfkit_Tools.PDFControl
             }
             Award = awardText;
             Grantor = grantorText;
-            ValidityFrom = certificate.ValidityEnds;
+            ValidityFrom = CommonHelper.GetExactDateFromString(certificate.ValidityStarts);
+            ValidityTo = CommonHelper.GetExactDateFromString(certificate.ValidityEnds);
             IntendedUsage = keyUsageText;
         }