/// <summary>Creates the encryption.</summary> /// <param name="userPassword"> /// the user password. Can be null or of zero length, which is equal to /// omitting the user password /// </param> /// <param name="ownerPassword"> /// the owner password. If it's null or empty, iText will generate /// a random string to be used as the owner password /// </param> /// <param name="permissions"> /// the user permissions /// The open permissions for the document can be /// <see cref="EncryptionConstants.ALLOW_PRINTING"/> /// , /// <see cref="EncryptionConstants.ALLOW_MODIFY_CONTENTS"/> /// , /// <see cref="EncryptionConstants.ALLOW_COPY"/> /// , /// <see cref="EncryptionConstants.ALLOW_MODIFY_ANNOTATIONS"/> /// , /// <see cref="EncryptionConstants.ALLOW_FILL_IN"/> /// , /// <see cref="EncryptionConstants.ALLOW_SCREENREADERS"/> /// , /// <see cref="EncryptionConstants.ALLOW_ASSEMBLY"/> /// and /// <see cref="EncryptionConstants.ALLOW_DEGRADED_PRINTING"/>. /// The permissions can be combined by ORing them /// </param> /// <param name="encryptionType"> /// the type of encryption. It can be one of /// <see cref="EncryptionConstants.STANDARD_ENCRYPTION_40"/> /// , /// <see cref="EncryptionConstants.STANDARD_ENCRYPTION_128"/> /// , /// <see cref="EncryptionConstants.ENCRYPTION_AES_128"/> /// or /// <see cref="EncryptionConstants.ENCRYPTION_AES_256"/>. /// Optionally /// <see cref="EncryptionConstants.DO_NOT_ENCRYPT_METADATA"/> /// can be /// ORed to output the metadata in cleartext. /// <see cref="EncryptionConstants.EMBEDDED_FILES_ONLY"/> /// can be ORed as well. /// Please be aware that the passed encryption types may override permissions: /// <see cref="EncryptionConstants.STANDARD_ENCRYPTION_40"/> /// implicitly sets /// <see cref="EncryptionConstants.DO_NOT_ENCRYPT_METADATA"/> /// and /// <see cref="EncryptionConstants.EMBEDDED_FILES_ONLY"/> /// as false; /// <see cref="EncryptionConstants.STANDARD_ENCRYPTION_128"/> /// implicitly sets /// <see cref="EncryptionConstants.EMBEDDED_FILES_ONLY"/> /// as false; /// </param> /// <param name="documentId">document id which will be used for encryption</param> /// <param name="version"> /// the /// <see cref="PdfVersion"/> /// of the target document for encryption /// </param> public PdfEncryption(byte[] userPassword, byte[] ownerPassword, int permissions, int encryptionType, byte[] documentId, PdfVersion version) : base(new PdfDictionary()) { this.documentId = documentId; if (version != null && version.CompareTo(PdfVersion.PDF_2_0) >= 0) { permissions = FixAccessibilityPermissionPdf20(permissions); } int revision = SetCryptoMode(encryptionType); switch (revision) { case STANDARD_ENCRYPTION_40: { StandardHandlerUsingStandard40 handlerStd40 = new StandardHandlerUsingStandard40(this.GetPdfObject(), userPassword , ownerPassword, permissions, encryptMetadata, embeddedFilesOnly, documentId); this.permissions = handlerStd40.GetPermissions(); securityHandler = handlerStd40; break; } case STANDARD_ENCRYPTION_128: { StandardHandlerUsingStandard128 handlerStd128 = new StandardHandlerUsingStandard128(this.GetPdfObject(), userPassword , ownerPassword, permissions, encryptMetadata, embeddedFilesOnly, documentId); this.permissions = handlerStd128.GetPermissions(); securityHandler = handlerStd128; break; } case AES_128: { StandardHandlerUsingAes128 handlerAes128 = new StandardHandlerUsingAes128(this.GetPdfObject(), userPassword , ownerPassword, permissions, encryptMetadata, embeddedFilesOnly, documentId); this.permissions = handlerAes128.GetPermissions(); securityHandler = handlerAes128; break; } case AES_256: { StandardHandlerUsingAes256 handlerAes256 = new StandardHandlerUsingAes256(this.GetPdfObject(), userPassword , ownerPassword, permissions, encryptMetadata, embeddedFilesOnly, version); this.permissions = handlerAes256.GetPermissions(); securityHandler = handlerAes256; break; } } }
/// <summary>Creates the certificate encryption.</summary> /// <remarks> /// Creates the certificate encryption. /// <para /> /// An array of one or more public certificates must be provided together with /// an array of the same size for the permissions for each certificate. /// </remarks> /// <param name="certs">the public certificates to be used for the encryption</param> /// <param name="permissions"> /// the user permissions for each of the certificates /// The open permissions for the document can be /// <see cref="EncryptionConstants.ALLOW_PRINTING"/> /// , /// <see cref="EncryptionConstants.ALLOW_MODIFY_CONTENTS"/> /// , /// <see cref="EncryptionConstants.ALLOW_COPY"/> /// , /// <see cref="EncryptionConstants.ALLOW_MODIFY_ANNOTATIONS"/> /// , /// <see cref="EncryptionConstants.ALLOW_FILL_IN"/> /// , /// <see cref="EncryptionConstants.ALLOW_SCREENREADERS"/> /// , /// <see cref="EncryptionConstants.ALLOW_ASSEMBLY"/> /// and /// <see cref="EncryptionConstants.ALLOW_DEGRADED_PRINTING"/>. /// The permissions can be combined by ORing them /// </param> /// <param name="encryptionType"> /// the type of encryption. It can be one of /// <see cref="EncryptionConstants.STANDARD_ENCRYPTION_40"/> /// , /// <see cref="EncryptionConstants.STANDARD_ENCRYPTION_128"/> /// , /// <see cref="EncryptionConstants.ENCRYPTION_AES_128"/> /// or /// <see cref="EncryptionConstants.ENCRYPTION_AES_256"/>. /// Optionally /// <see cref="EncryptionConstants.DO_NOT_ENCRYPT_METADATA"/> /// can be ORed /// to output the metadata in cleartext. /// <see cref="EncryptionConstants.EMBEDDED_FILES_ONLY"/> /// can be ORed as well. /// Please be aware that the passed encryption types may override permissions: /// <see cref="EncryptionConstants.STANDARD_ENCRYPTION_40"/> /// implicitly sets /// <see cref="EncryptionConstants.DO_NOT_ENCRYPT_METADATA"/> /// and /// <see cref="EncryptionConstants.EMBEDDED_FILES_ONLY"/> /// as false; /// <see cref="EncryptionConstants.STANDARD_ENCRYPTION_128"/> /// implicitly sets /// <see cref="EncryptionConstants.EMBEDDED_FILES_ONLY"/> /// as false; /// </param> /// <param name="version"> /// the /// <see cref="PdfVersion"/> /// of the target document for encryption /// </param> public PdfEncryption(X509Certificate[] certs, int[] permissions, int encryptionType, PdfVersion version) : base(new PdfDictionary()) { if (version != null && version.CompareTo(PdfVersion.PDF_2_0) >= 0) { for (int i = 0; i < permissions.Length; i++) { permissions[i] = FixAccessibilityPermissionPdf20(permissions[i]); } } int revision = SetCryptoMode(encryptionType); switch (revision) { case STANDARD_ENCRYPTION_40: { securityHandler = new PubSecHandlerUsingStandard40(this.GetPdfObject(), certs, permissions, encryptMetadata , embeddedFilesOnly); break; } case STANDARD_ENCRYPTION_128: { securityHandler = new PubSecHandlerUsingStandard128(this.GetPdfObject(), certs, permissions, encryptMetadata , embeddedFilesOnly); break; } case AES_128: { securityHandler = new PubSecHandlerUsingAes128(this.GetPdfObject(), certs, permissions, encryptMetadata, embeddedFilesOnly ); break; } case AES_256: { securityHandler = new PubSecHandlerUsingAes256(this.GetPdfObject(), certs, permissions, encryptMetadata, embeddedFilesOnly ); break; } } }