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