// methods overriding some methods in PdfObject /** * Returns the PDF representation of this <CODE>PdfString</CODE>. * * @return an array of <CODE>byte</CODE>s */ public override void ToPdf(PdfWriter writer, Stream os) { byte[] b = GetBytes(); PdfEncryption crypto = null; if (writer != null) { crypto = writer.Encryption; } if (crypto != null && !crypto.IsEmbeddedFilesOnly()) { b = crypto.EncryptByteArray(b); } if (hexWriting) { ByteBuffer buf = new ByteBuffer(); buf.Append('<'); int len = b.Length; for (int k = 0; k < len; ++k) { buf.AppendHex(b[k]); } buf.Append('>'); os.Write(buf.ToByteArray(), 0, buf.Size); } else { b = PdfContentByte.EscapeString(b); os.Write(b, 0, b.Length); } }
public PdfArray GetEncodedRecipients() { PdfArray EncodedRecipients = new PdfArray(); byte[] cms = null; for (int i = 0; i < recipients.Count; i++) { try { cms = GetEncodedRecipient(i); EncodedRecipients.Add(new PdfLiteral(PdfContentByte.EscapeString(cms))); } catch { EncodedRecipients = null; } } return(EncodedRecipients); }
public PdfDictionary GetEncryptionDictionary() { PdfDictionary dic = new PdfDictionary(); if (publicKeyHandler.GetRecipientsSize() > 0) { PdfArray recipients = null; dic.Put(PdfName.FILTER, PdfName.PUBSEC); dic.Put(PdfName.R, new PdfNumber(revision)); recipients = publicKeyHandler.GetEncodedRecipients(); if (revision == STANDARD_ENCRYPTION_40) { dic.Put(PdfName.V, new PdfNumber(1)); dic.Put(PdfName.SUBFILTER, PdfName.ADBE_PKCS7_S4); dic.Put(PdfName.RECIPIENTS, recipients); } else if (revision == STANDARD_ENCRYPTION_128 && encryptMetadata) { dic.Put(PdfName.V, new PdfNumber(2)); dic.Put(PdfName.LENGTH, new PdfNumber(128)); dic.Put(PdfName.SUBFILTER, PdfName.ADBE_PKCS7_S4); dic.Put(PdfName.RECIPIENTS, recipients); } else { dic.Put(PdfName.R, new PdfNumber(AES_128)); dic.Put(PdfName.V, new PdfNumber(4)); dic.Put(PdfName.SUBFILTER, PdfName.ADBE_PKCS7_S5); PdfDictionary stdcf = new PdfDictionary(); stdcf.Put(PdfName.RECIPIENTS, recipients); if (!encryptMetadata) { stdcf.Put(PdfName.ENCRYPTMETADATA, PdfBoolean.PDFFALSE); } if (revision == AES_128) { stdcf.Put(PdfName.CFM, PdfName.AESV2); } else { stdcf.Put(PdfName.CFM, PdfName.V2); } PdfDictionary cf = new PdfDictionary(); cf.Put(PdfName.DEFAULTCRYPTFILTER, stdcf); dic.Put(PdfName.CF, cf); if (embeddedFilesOnly) { dic.Put(PdfName.EFF, PdfName.DEFAULTCRYPTFILTER); dic.Put(PdfName.STRF, PdfName.IDENTITY); dic.Put(PdfName.STMF, PdfName.IDENTITY); } else { dic.Put(PdfName.STRF, PdfName.DEFAULTCRYPTFILTER); dic.Put(PdfName.STMF, PdfName.DEFAULTCRYPTFILTER); } } IDigest sh = DigestUtilities.GetDigest("SHA1"); byte[] encodedRecipient = null; byte[] seed = publicKeyHandler.GetSeed(); sh.BlockUpdate(seed, 0, seed.Length); for (int i = 0; i < publicKeyHandler.GetRecipientsSize(); i++) { encodedRecipient = publicKeyHandler.GetEncodedRecipient(i); sh.BlockUpdate(encodedRecipient, 0, encodedRecipient.Length); } if (!encryptMetadata) { sh.BlockUpdate(metadataPad, 0, metadataPad.Length); } byte[] mdResult = new byte[sh.GetDigestSize()]; sh.DoFinal(mdResult, 0); SetupByEncryptionKey(mdResult, keyLength); } else { dic.Put(PdfName.FILTER, PdfName.STANDARD); dic.Put(PdfName.O, new PdfLiteral(PdfContentByte.EscapeString(ownerKey))); dic.Put(PdfName.U, new PdfLiteral(PdfContentByte.EscapeString(userKey))); dic.Put(PdfName.P, new PdfNumber(permissions)); dic.Put(PdfName.R, new PdfNumber(revision)); if (revision == STANDARD_ENCRYPTION_40) { dic.Put(PdfName.V, new PdfNumber(1)); } else if (revision == STANDARD_ENCRYPTION_128 && encryptMetadata) { dic.Put(PdfName.V, new PdfNumber(2)); dic.Put(PdfName.LENGTH, new PdfNumber(128)); } else if (revision == AES_256) { if (!encryptMetadata) { dic.Put(PdfName.ENCRYPTMETADATA, PdfBoolean.PDFFALSE); } dic.Put(PdfName.OE, new PdfLiteral(PdfContentByte.EscapeString(oeKey))); dic.Put(PdfName.UE, new PdfLiteral(PdfContentByte.EscapeString(ueKey))); dic.Put(PdfName.PERMS, new PdfLiteral(PdfContentByte.EscapeString(perms))); dic.Put(PdfName.V, new PdfNumber(revision)); dic.Put(PdfName.LENGTH, new PdfNumber(256)); PdfDictionary stdcf = new PdfDictionary(); stdcf.Put(PdfName.LENGTH, new PdfNumber(32)); if (embeddedFilesOnly) { stdcf.Put(PdfName.AUTHEVENT, PdfName.EFOPEN); dic.Put(PdfName.EFF, PdfName.STDCF); dic.Put(PdfName.STRF, PdfName.IDENTITY); dic.Put(PdfName.STMF, PdfName.IDENTITY); } else { stdcf.Put(PdfName.AUTHEVENT, PdfName.DOCOPEN); dic.Put(PdfName.STRF, PdfName.STDCF); dic.Put(PdfName.STMF, PdfName.STDCF); } stdcf.Put(PdfName.CFM, PdfName.AESV3); PdfDictionary cf = new PdfDictionary(); cf.Put(PdfName.STDCF, stdcf); dic.Put(PdfName.CF, cf); } else { if (!encryptMetadata) { dic.Put(PdfName.ENCRYPTMETADATA, PdfBoolean.PDFFALSE); } dic.Put(PdfName.R, new PdfNumber(AES_128)); dic.Put(PdfName.V, new PdfNumber(4)); dic.Put(PdfName.LENGTH, new PdfNumber(128)); PdfDictionary stdcf = new PdfDictionary(); stdcf.Put(PdfName.LENGTH, new PdfNumber(16)); if (embeddedFilesOnly) { stdcf.Put(PdfName.AUTHEVENT, PdfName.EFOPEN); dic.Put(PdfName.EFF, PdfName.STDCF); dic.Put(PdfName.STRF, PdfName.IDENTITY); dic.Put(PdfName.STMF, PdfName.IDENTITY); } else { stdcf.Put(PdfName.AUTHEVENT, PdfName.DOCOPEN); dic.Put(PdfName.STRF, PdfName.STDCF); dic.Put(PdfName.STMF, PdfName.STDCF); } if (revision == AES_128) { stdcf.Put(PdfName.CFM, PdfName.AESV2); } else { stdcf.Put(PdfName.CFM, PdfName.V2); } PdfDictionary cf = new PdfDictionary(); cf.Put(PdfName.STDCF, stdcf); dic.Put(PdfName.CF, cf); } } return(dic); }
public PdfDictionary GetEncryptionDictionary() { var dic = new PdfDictionary(); if (PublicKeyHandler.GetRecipientsSize() > 0) { PdfArray recipients = null; dic.Put(PdfName.Filter, PdfName.Pubsec); dic.Put(PdfName.R, new PdfNumber(_revision)); recipients = PublicKeyHandler.GetEncodedRecipients(); if (_revision == STANDARD_ENCRYPTION_40) { dic.Put(PdfName.V, new PdfNumber(1)); dic.Put(PdfName.Subfilter, PdfName.AdbePkcs7S4); dic.Put(PdfName.Recipients, recipients); } else if (_revision == STANDARD_ENCRYPTION_128 && _encryptMetadata) { dic.Put(PdfName.V, new PdfNumber(2)); dic.Put(PdfName.LENGTH, new PdfNumber(128)); dic.Put(PdfName.Subfilter, PdfName.AdbePkcs7S4); dic.Put(PdfName.Recipients, recipients); } else { dic.Put(PdfName.R, new PdfNumber(AES_128)); dic.Put(PdfName.V, new PdfNumber(4)); dic.Put(PdfName.Subfilter, PdfName.AdbePkcs7S5); var stdcf = new PdfDictionary(); stdcf.Put(PdfName.Recipients, recipients); if (!_encryptMetadata) { stdcf.Put(PdfName.Encryptmetadata, PdfBoolean.Pdffalse); } if (_revision == AES_128) { stdcf.Put(PdfName.Cfm, PdfName.Aesv2); } else { stdcf.Put(PdfName.Cfm, PdfName.V2); } var cf = new PdfDictionary(); cf.Put(PdfName.Defaultcryptfilter, stdcf); dic.Put(PdfName.Cf, cf); if (_embeddedFilesOnly) { dic.Put(PdfName.Eff, PdfName.Defaultcryptfilter); dic.Put(PdfName.Strf, PdfName.Identity); dic.Put(PdfName.Stmf, PdfName.Identity); } else { dic.Put(PdfName.Strf, PdfName.Defaultcryptfilter); dic.Put(PdfName.Stmf, PdfName.Defaultcryptfilter); } } #if NET40 SHA1 sh = new SHA1CryptoServiceProvider(); byte[] encodedRecipient = null; var seed = PublicKeyHandler.GetSeed(); sh.TransformBlock(seed, 0, seed.Length, seed, 0); for (var i = 0; i < PublicKeyHandler.GetRecipientsSize(); i++) { encodedRecipient = PublicKeyHandler.GetEncodedRecipient(i); sh.TransformBlock(encodedRecipient, 0, encodedRecipient.Length, encodedRecipient, 0); } if (!_encryptMetadata) { sh.TransformBlock(MetadataPad, 0, MetadataPad.Length, MetadataPad, 0); } sh.TransformFinalBlock(seed, 0, 0); var mdResult = sh.Hash; #else byte[] mdResult; using (var sh = IncrementalHash.CreateHash(HashAlgorithmName.SHA1)) { var seed = PublicKeyHandler.GetSeed(); sh.AppendData(seed, 0, seed.Length); for (var i = 0; i < PublicKeyHandler.GetRecipientsSize(); i++) { var encodedRecipient = PublicKeyHandler.GetEncodedRecipient(i); sh.AppendData(encodedRecipient, 0, encodedRecipient.Length); } if (!_encryptMetadata) { sh.AppendData(MetadataPad, 0, MetadataPad.Length); } mdResult = sh.GetHashAndReset(); } #endif SetupByEncryptionKey(mdResult, _keyLength); } else { dic.Put(PdfName.Filter, PdfName.Standard); dic.Put(PdfName.O, new PdfLiteral(PdfContentByte.EscapeString(OwnerKey))); dic.Put(PdfName.U, new PdfLiteral(PdfContentByte.EscapeString(UserKey))); dic.Put(PdfName.P, new PdfNumber(Permissions)); dic.Put(PdfName.R, new PdfNumber(_revision)); if (_revision == STANDARD_ENCRYPTION_40) { dic.Put(PdfName.V, new PdfNumber(1)); } else if (_revision == STANDARD_ENCRYPTION_128 && _encryptMetadata) { dic.Put(PdfName.V, new PdfNumber(2)); dic.Put(PdfName.LENGTH, new PdfNumber(128)); } else { if (!_encryptMetadata) { dic.Put(PdfName.Encryptmetadata, PdfBoolean.Pdffalse); } dic.Put(PdfName.R, new PdfNumber(AES_128)); dic.Put(PdfName.V, new PdfNumber(4)); dic.Put(PdfName.LENGTH, new PdfNumber(128)); var stdcf = new PdfDictionary(); stdcf.Put(PdfName.LENGTH, new PdfNumber(16)); if (_embeddedFilesOnly) { stdcf.Put(PdfName.Authevent, PdfName.Efopen); dic.Put(PdfName.Eff, PdfName.Stdcf); dic.Put(PdfName.Strf, PdfName.Identity); dic.Put(PdfName.Stmf, PdfName.Identity); } else { stdcf.Put(PdfName.Authevent, PdfName.Docopen); dic.Put(PdfName.Strf, PdfName.Stdcf); dic.Put(PdfName.Stmf, PdfName.Stdcf); } if (_revision == AES_128) { stdcf.Put(PdfName.Cfm, PdfName.Aesv2); } else { stdcf.Put(PdfName.Cfm, PdfName.V2); } var cf = new PdfDictionary(); cf.Put(PdfName.Stdcf, stdcf); dic.Put(PdfName.Cf, cf); } } return(dic); }