Decrypt: take a Ref instead of two int
diff --git a/poppler/Decrypt.cc b/poppler/Decrypt.cc
index 16476f4..6d9c14f 100644
--- a/poppler/Decrypt.cc
+++ b/poppler/Decrypt.cc
@@ -305,7 +305,7 @@
//------------------------------------------------------------------------
BaseCryptStream::BaseCryptStream(Stream *strA, const unsigned char *fileKey, CryptAlgorithm algoA,
- int keyLength, int objNum, int objGen):
+ int keyLength, Ref refA):
FilterStream(strA)
{
algo = algoA;
@@ -321,11 +321,11 @@
switch (algo) {
case cryptRC4:
if (likely(keyLength < static_cast<int>(sizeof(objKey) - 4))) {
- objKey[keyLength] = objNum & 0xff;
- objKey[keyLength + 1] = (objNum >> 8) & 0xff;
- objKey[keyLength + 2] = (objNum >> 16) & 0xff;
- objKey[keyLength + 3] = objGen & 0xff;
- objKey[keyLength + 4] = (objGen >> 8) & 0xff;
+ objKey[keyLength] = refA.num & 0xff;
+ objKey[keyLength + 1] = (refA.num >> 8) & 0xff;
+ objKey[keyLength + 2] = (refA.num >> 16) & 0xff;
+ objKey[keyLength + 3] = refA.gen & 0xff;
+ objKey[keyLength + 4] = (refA.gen >> 8) & 0xff;
md5(objKey, keyLength + 5, objKey);
}
if ((objKeyLength = keyLength + 5) > 16) {
@@ -333,11 +333,11 @@
}
break;
case cryptAES:
- objKey[keyLength] = objNum & 0xff;
- objKey[keyLength + 1] = (objNum >> 8) & 0xff;
- objKey[keyLength + 2] = (objNum >> 16) & 0xff;
- objKey[keyLength + 3] = objGen & 0xff;
- objKey[keyLength + 4] = (objGen >> 8) & 0xff;
+ objKey[keyLength] = refA.num & 0xff;
+ objKey[keyLength + 1] = (refA.num >> 8) & 0xff;
+ objKey[keyLength + 2] = (refA.num >> 16) & 0xff;
+ objKey[keyLength + 3] = refA.gen & 0xff;
+ objKey[keyLength + 4] = (refA.gen >> 8) & 0xff;
objKey[keyLength + 5] = 0x73; // 's'
objKey[keyLength + 6] = 0x41; // 'A'
objKey[keyLength + 7] = 0x6c; // 'l'
@@ -397,8 +397,8 @@
//------------------------------------------------------------------------
EncryptStream::EncryptStream(Stream *strA, const unsigned char *fileKey, CryptAlgorithm algoA,
- int keyLength, int objNum, int objGen):
- BaseCryptStream(strA, fileKey, algoA, keyLength, objNum, objGen)
+ int keyLength, Ref refA):
+ BaseCryptStream(strA, fileKey, algoA, keyLength, refA)
{
// Fill the CBC initialization vector for AES and AES-256
switch (algo) {
@@ -489,8 +489,8 @@
//------------------------------------------------------------------------
DecryptStream::DecryptStream(Stream *strA, const unsigned char *fileKey, CryptAlgorithm algoA,
- int keyLength, int objNum, int objGen):
- BaseCryptStream(strA, fileKey, algoA, keyLength, objNum, objGen)
+ int keyLength, Ref refA):
+ BaseCryptStream(strA, fileKey, algoA, keyLength, refA)
{
}
diff --git a/poppler/Decrypt.h b/poppler/Decrypt.h
index d4667c8..fbd135f 100644
--- a/poppler/Decrypt.h
+++ b/poppler/Decrypt.h
@@ -17,7 +17,7 @@
// Copyright (C) 2009 David Benjamin <davidben@mit.edu>
// Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it>
// Copyright (C) 2013 Adrian Johnson <ajohnson@redneon.com>
-// Copyright (C) 2013, 2018 Albert Astals Cid <aacid@kde.org>
+// Copyright (C) 2013, 2018, 2019 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de>
//
// To see a description of the changes please see the Changelog file that
@@ -99,7 +99,7 @@
public:
BaseCryptStream(Stream *strA, const unsigned char *fileKey, CryptAlgorithm algoA,
- int keyLength, int objNum, int objGen);
+ int keyLength, Ref ref);
~BaseCryptStream();
StreamKind getKind() override { return strCrypt; }
void reset() override;
@@ -133,7 +133,7 @@
public:
EncryptStream(Stream *strA, const unsigned char *fileKey, CryptAlgorithm algoA,
- int keyLength, int objNum, int objGen);
+ int keyLength, Ref ref);
~EncryptStream();
void reset() override;
int lookChar() override;
@@ -143,7 +143,7 @@
public:
DecryptStream(Stream *strA, const unsigned char *fileKey, CryptAlgorithm algoA,
- int keyLength, int objNum, int objGen);
+ int keyLength, Ref ref);
~DecryptStream();
void reset() override;
int lookChar() override;
diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc
index aafba58..dd619c6 100644
--- a/poppler/PDFDoc.cc
+++ b/poppler/PDFDoc.cc
@@ -1308,7 +1308,7 @@
GooString *sEnc = nullptr;
if (fileKey) {
EncryptStream *enc = new EncryptStream(new MemStream(s->c_str(), 0, s->getLength(), Object(objNull)),
- fileKey, encAlgorithm, keyLength, ref.num, ref.gen);
+ fileKey, encAlgorithm, keyLength, ref);
sEnc = new GooString();
int c;
enc->reset();
@@ -1440,12 +1440,12 @@
}
}
if (removeFilter) {
- encStream = new EncryptStream(stream, fileKey, encAlgorithm, keyLength, ref.num, ref.gen);
+ encStream = new EncryptStream(stream, fileKey, encAlgorithm, keyLength, ref);
encStream->setAutoDelete(false);
stream = encStream;
}
} else {
- encStream = new EncryptStream(stream, fileKey, encAlgorithm, keyLength, ref.num, ref.gen);
+ encStream = new EncryptStream(stream, fileKey, encAlgorithm, keyLength, ref);
encStream->setAutoDelete(false);
stream = encStream;
}
@@ -1453,7 +1453,7 @@
removeFilter = false;
}
} else if (fileKey != nullptr) { // Encrypt stream
- encStream = new EncryptStream(stream, fileKey, encAlgorithm, keyLength, ref.num, ref.gen);
+ encStream = new EncryptStream(stream, fileKey, encAlgorithm, keyLength, ref);
encStream->setAutoDelete(false);
stream = encStream;
}
@@ -1476,7 +1476,7 @@
writeStream (stream,outStr);
delete encStream;
} else if (fileKey != nullptr && stream->getKind() == strFile && static_cast<FileStream*>(stream)->getNeedsEncryptionOnSave()) {
- EncryptStream *encStream = new EncryptStream(stream, fileKey, encAlgorithm, keyLength, ref.num, ref.gen);
+ EncryptStream *encStream = new EncryptStream(stream, fileKey, encAlgorithm, keyLength, ref);
encStream->setAutoDelete(false);
writeDictionnary (encStream->getDict(), outStr, xRef, numOffset, fileKey, encAlgorithm, keyLength, ref, alreadyWrittenDicts);
writeStream (encStream, outStr);
diff --git a/poppler/Parser.cc b/poppler/Parser.cc
index 0cb1f7f..db839de 100644
--- a/poppler/Parser.cc
+++ b/poppler/Parser.cc
@@ -172,7 +172,7 @@
s2 = new GooString();
decrypt = new DecryptStream(new MemStream(s->c_str(), 0, s->getLength(), Object(objNull)),
fileKey, encAlgorithm, keyLength,
- objNum, objGen);
+ {objNum, objGen});
decrypt->reset();
while ((c = decrypt->getChar()) != EOF) {
s2->append((char)c);
@@ -294,7 +294,7 @@
// handle decryption
if (fileKey) {
str = new DecryptStream(str, fileKey, encAlgorithm, keyLength,
- objNum, objGen);
+ {objNum, objGen});
}
// get filters