void CreateEncrypt(PdfElement elem) { var cf = elem.Get <PdfElement>("CF"); if (cf != null) { var stdCf = cf.Get <PdfElement>("StdCF"); if (stdCf != null) { } } var pValue = elem.Get <PdfInteger>("P").Value; var vValue = elem.Get <PdfInteger>("V").Value; var rValue = elem.Get <PdfInteger>("R").Value; var oValue = elem.Get <PdfString>("O").ToISOBytes(); var uValue = elem.Get <PdfString>("U").ToISOBytes(); var filter = elem.Get <PdfName>("Filter")?.Name; EncryptAlg cryptoMode = EncryptAlg.STANDARD_ENCRYPTION_128; switch (rValue) { case 4: if (vValue != 4) { throw new PdfException($"Invalid encrypt. V={vValue}, P={vValue}"); } var cfObj = elem.Get <PdfDictionary>("CF"); var stdCfObj = cfObj.Get <PdfDictionary>("StdCF"); if (stdCfObj != null) { if (stdCfObj.Get <PdfName>("CFM")?.Name == "V2") { cryptoMode = EncryptAlg.STANDARD_ENCRYPTION_128; } } break; default: throw new NotImplementedException($"Decrypt value {rValue}"); } _decryptor = new PdfEncryption(); _decryptor.SetCryptoMode(cryptoMode, 0); if (filter == "Standard") { if (rValue != 5) { _decryptor.SetupByOwnerPassword(_documentId, uValue, oValue, pValue); Int32 checkLen = (rValue == 3 || rValue == 4) ? 16 : 32; if (!EqualsArray(uValue, _decryptor.UserKey, checkLen)) { _decryptor.SetupByUserPassword(_documentId, oValue, pValue); } } } }
void ParseObjStream(PdfElement elem) { PdfStream stream = elem.Get <PdfStream>("_stream"); var ms = new MemoryStream(stream.Bytes); using (var br = new BinaryReader(ms)) { PdfReader rdr = PdfReader.Create(br); foreach (var obj in rdr.ReadObjStream()) { var name = $"{obj.Item1} 0"; if (obj.Item2 is PdfDictionary objDict) { AddObject(name, objDict); } } } }