using System; using System.Windows.Forms; using nsoftware.SecureBlackbox; namespace PDFDecryptorDemo { public class EncPropsForm : Form { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.btnCancel = new System.Windows.Forms.Button(); this.btnOK = new System.Windows.Forms.Button(); this.gbEncProps = new System.Windows.Forms.GroupBox(); this.lProvideCertificate = new System.Windows.Forms.Label(); this.lProvidePassword = new System.Windows.Forms.Label(); this.lMetadataStatus = new System.Windows.Forms.Label(); this.tbCertPassword = new System.Windows.Forms.TextBox(); this.btnBrowseCert = new System.Windows.Forms.Button(); this.lCertPassword = new System.Windows.Forms.Label(); this.lCertificate = new System.Windows.Forms.Label(); this.tbCert = new System.Windows.Forms.TextBox(); this.tbPassword = new System.Windows.Forms.TextBox(); this.lEncryptionAlgorithm = new System.Windows.Forms.Label(); this.openCertDialog = new System.Windows.Forms.OpenFileDialog(); this.lInfo = new System.Windows.Forms.Label(); this.gbEncProps.SuspendLayout(); this.SuspendLayout(); // // btnCancel // this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnCancel.Location = new System.Drawing.Point(204, 296); this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(75, 23); this.btnCancel.TabIndex = 3; this.btnCancel.Text = "Cancel"; // // btnOK // this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.btnOK.Location = new System.Drawing.Point(124, 296); this.btnOK.Name = "btnOK"; this.btnOK.Size = new System.Drawing.Size(75, 23); this.btnOK.TabIndex = 2; this.btnOK.Text = "OK"; // // gbEncProps // this.gbEncProps.Controls.Add(this.lProvideCertificate); this.gbEncProps.Controls.Add(this.lProvidePassword); this.gbEncProps.Controls.Add(this.lMetadataStatus); this.gbEncProps.Controls.Add(this.tbCertPassword); this.gbEncProps.Controls.Add(this.btnBrowseCert); this.gbEncProps.Controls.Add(this.lCertPassword); this.gbEncProps.Controls.Add(this.lCertificate); this.gbEncProps.Controls.Add(this.tbCert); this.gbEncProps.Controls.Add(this.tbPassword); this.gbEncProps.Controls.Add(this.lEncryptionAlgorithm); this.gbEncProps.Location = new System.Drawing.Point(12, 45); this.gbEncProps.Name = "gbEncProps"; this.gbEncProps.Size = new System.Drawing.Size(367, 243); this.gbEncProps.TabIndex = 1; this.gbEncProps.TabStop = false; // // lProvideCertificate // this.lProvideCertificate.AutoSize = true; this.lProvideCertificate.Location = new System.Drawing.Point(16, 129); this.lProvideCertificate.Name = "lProvideCertificate"; this.lProvideCertificate.Size = new System.Drawing.Size(162, 13); this.lProvideCertificate.TabIndex = 4; this.lProvideCertificate.Text = "Provide certificate for decryption:"; // // lProvidePassword // this.lProvidePassword.AutoSize = true; this.lProvidePassword.Location = new System.Drawing.Point(16, 78); this.lProvidePassword.Name = "lProvidePassword"; this.lProvidePassword.Size = new System.Drawing.Size(161, 13); this.lProvidePassword.TabIndex = 2; this.lProvidePassword.Text = "Provide password for decryption:"; // // lMetadataStatus // this.lMetadataStatus.AutoSize = true; this.lMetadataStatus.Location = new System.Drawing.Point(16, 45); this.lMetadataStatus.Name = "lMetadataStatus"; this.lMetadataStatus.Size = new System.Drawing.Size(86, 13); this.lMetadataStatus.TabIndex = 1; this.lMetadataStatus.Text = "Metadata status:"; // // tbCertPassword // this.tbCertPassword.Enabled = false; this.tbCertPassword.Location = new System.Drawing.Point(32, 211); this.tbCertPassword.Name = "tbCertPassword"; this.tbCertPassword.PasswordChar = '*'; this.tbCertPassword.Size = new System.Drawing.Size(128, 20); this.tbCertPassword.TabIndex = 9; // // btnBrowseCert // this.btnBrowseCert.Enabled = false; this.btnBrowseCert.Location = new System.Drawing.Point(286, 163); this.btnBrowseCert.Name = "btnBrowseCert"; this.btnBrowseCert.Size = new System.Drawing.Size(75, 27); this.btnBrowseCert.TabIndex = 7; this.btnBrowseCert.Text = "Browse..."; this.btnBrowseCert.Click += new System.EventHandler(this.btnBrowseCert_Click); // // lCertPassword // this.lCertPassword.AutoSize = true; this.lCertPassword.Enabled = false; this.lCertPassword.Location = new System.Drawing.Point(32, 195); this.lCertPassword.Name = "lCertPassword"; this.lCertPassword.Size = new System.Drawing.Size(105, 13); this.lCertPassword.TabIndex = 8; this.lCertPassword.Text = "Certificate password:"; // // lCertificate // this.lCertificate.AutoSize = true; this.lCertificate.Enabled = false; this.lCertificate.Location = new System.Drawing.Point(32, 149); this.lCertificate.Name = "lCertificate"; this.lCertificate.Size = new System.Drawing.Size(110, 13); this.lCertificate.TabIndex = 5; this.lCertificate.Text = "Decryption certificate:"; // // tbCert // this.tbCert.Enabled = false; this.tbCert.Location = new System.Drawing.Point(32, 167); this.tbCert.Name = "tbCert"; this.tbCert.Size = new System.Drawing.Size(248, 20); this.tbCert.TabIndex = 6; // // tbPassword // this.tbPassword.Location = new System.Drawing.Point(35, 97); this.tbPassword.Name = "tbPassword"; this.tbPassword.PasswordChar = '*'; this.tbPassword.Size = new System.Drawing.Size(128, 20); this.tbPassword.TabIndex = 3; // // lEncryptionAlgorithm // this.lEncryptionAlgorithm.AutoSize = true; this.lEncryptionAlgorithm.Location = new System.Drawing.Point(16, 19); this.lEncryptionAlgorithm.Name = "lEncryptionAlgorithm"; this.lEncryptionAlgorithm.Size = new System.Drawing.Size(105, 13); this.lEncryptionAlgorithm.TabIndex = 0; this.lEncryptionAlgorithm.Text = "Encryption algorithm:"; // // openCertDialog // this.openCertDialog.Filter = "Raw X.509 certificate (*.cer, *.csr, *.crt)|*.CER;*.CSR;*.CRT|Base64-encoded X.50" + "9 certificate (*.pem)|*.PEM|PKCS#12 certificate (*.pfx, *.p12)|*.PFX; *.P12|All " + "files (*.*)|*.*"; this.openCertDialog.InitialDirectory = "."; // // lInfo // this.lInfo.ForeColor = System.Drawing.SystemColors.Highlight; this.lInfo.Location = new System.Drawing.Point(9, 9); this.lInfo.Name = "lInfo"; this.lInfo.Size = new System.Drawing.Size(371, 35); this.lInfo.TabIndex = 0; this.lInfo.Text = "The PDF document is encrypted. Depending on the document\'s encryption type you wo" + "uld need to provide a decryption password or decryption certificate."; this.lInfo.UseMnemonic = false; // // EncPropsForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(389, 327); this.Controls.Add(this.lInfo); this.Controls.Add(this.btnCancel); this.Controls.Add(this.btnOK); this.Controls.Add(this.gbEncProps); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.Name = "EncPropsForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Encryption properties"; this.gbEncProps.ResumeLayout(false); this.gbEncProps.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.Button btnOK; private System.Windows.Forms.GroupBox gbEncProps; private System.Windows.Forms.TextBox tbCertPassword; private System.Windows.Forms.Button btnBrowseCert; private System.Windows.Forms.Label lCertPassword; private System.Windows.Forms.Label lCertificate; private System.Windows.Forms.TextBox tbCert; private System.Windows.Forms.TextBox tbPassword; private System.Windows.Forms.OpenFileDialog openCertDialog; private System.Windows.Forms.Label lProvideCertificate; private System.Windows.Forms.Label lProvidePassword; private System.Windows.Forms.Label lMetadataStatus; private System.Windows.Forms.Label lInfo; private System.Windows.Forms.Label lEncryptionAlgorithm; public EncPropsForm() { InitializeComponent(); } private void btnBrowseCert_Click(object sender, EventArgs e) { openCertDialog.FileName = tbCert.Text; if (openCertDialog.ShowDialog() == DialogResult.OK) tbCert.Text = openCertDialog.FileName; } private int m_Count = 0; public void SetPDFEncryptionProps(PDFDecryptor PDFDecryptor) { string Alg = PDFDecryptor.DocumentInfo.EncryptionAlgorithm; if (Alg == "RC4") { Alg = Alg + "/" + PDFDecryptor.Config("RC4KeyBits"); } lEncryptionAlgorithm.Text = "Encryption algorithm: " + Alg; if (PDFDecryptor.DocumentInfo.EncryptionType == PDFEncryptionTypes.petPassword) { if (m_Count > 0) MessageBox.Show("Invalid password", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); if (PDFDecryptor.DocumentInfo.MetadataEncrypted) lMetadataStatus.Text = "Metadata status: encrypted"; else lMetadataStatus.Text = "Metadata status: not encrypted"; lProvidePassword.Enabled = true; tbPassword.Enabled = true; lProvideCertificate.Enabled = false; tbCert.Enabled = false; tbCertPassword.Enabled = false; btnBrowseCert.Enabled = false; } else { lMetadataStatus.Text = ""; // metadata status could be read only after decryption lProvidePassword.Enabled = false; tbPassword.Enabled = false; lProvideCertificate.Enabled = true; tbCert.Enabled = true; tbCertPassword.Enabled = true; btnBrowseCert.Enabled = true; } } public Certificate LoadCertificate(string file, string password) { Certificate cert = null; if (file.Length > 0) { try { CertificateManager certmanager = new CertificateManager(); certmanager.ImportFromFile(file, password); cert = certmanager.Certificate; } catch (Exception e) { MessageBox.Show("Cannot load certificate!"); } } return cert; } public void GetPDFDecryptionInfo(PDFDecryptor PDFDecryptor) { if (PDFDecryptor.DocumentInfo.EncryptionType == PDFEncryptionTypes.petPassword) PDFDecryptor.Password = tbPassword.Text; else { try { PDFDecryptor.DecryptionCertificate = LoadCertificate(tbCert.Text, tbCertPassword.Text); } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } m_Count++; } } } }