Break dependence of fpdfapi/page on fxcrt/fdrm.

Give CPDF_StreamAcc a new method to do the work of computing
a digest that was formerly being done in the page layer.
CPDF_StreamAcc is part of the parser layer, which already has
access to fdrm for several other code paths.

Change-Id: Icb249ee59e34b1475804849b0f42329c1a1499af
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/58555
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/BUILD.gn b/core/fpdfapi/page/BUILD.gn
index 17e2b6e..e853773 100644
--- a/core/fpdfapi/page/BUILD.gn
+++ b/core/fpdfapi/page/BUILD.gn
@@ -101,7 +101,6 @@
   configs += [ "../../../:pdfium_core_config" ]
   deps = [
     "../../../constants",
-    "../../fdrm",
     "../../fxcodec",
     "../../fxcrt",
     "../../fxge",
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index 908f081..0c97af3 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -13,7 +13,6 @@
 #include <vector>
 
 #include "build/build_config.h"
-#include "core/fdrm/fx_crypt.h"
 #include "core/fpdfapi/font/cpdf_type1font.h"
 #include "core/fpdfapi/page/cpdf_form.h"
 #include "core/fpdfapi/page/cpdf_iccprofile.h"
@@ -388,10 +387,7 @@
   auto pAccessor = pdfium::MakeRetain<CPDF_StreamAcc>(pProfileStream);
   pAccessor->LoadAllDataFiltered();
 
-  uint8_t digest[20];
-  CRYPT_SHA1Generate(pAccessor->GetData(), pAccessor->GetSize(), digest);
-
-  ByteString bsDigest(digest, 20);
+  ByteString bsDigest = pAccessor->ComputeDigest();
   auto hash_it = m_HashProfileMap.find(bsDigest);
   if (hash_it != m_HashProfileMap.end()) {
     auto it_copied_stream = m_IccProfileMap.find(hash_it->second.Get());
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.cpp b/core/fpdfapi/parser/cpdf_stream_acc.cpp
index c666ad7..93a2d85 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.cpp
+++ b/core/fpdfapi/parser/cpdf_stream_acc.cpp
@@ -9,6 +9,7 @@
 #include <utility>
 #include <vector>
 
+#include "core/fdrm/fx_crypt.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "core/fpdfapi/parser/fpdf_parser_decode.h"
@@ -70,6 +71,12 @@
                                                    : 0;
 }
 
+ByteString CPDF_StreamAcc::ComputeDigest() const {
+  uint8_t digest[20];
+  CRYPT_SHA1Generate(GetData(), GetSize(), digest);
+  return ByteString(digest, 20);
+}
+
 std::unique_ptr<uint8_t, FxFreeDeleter> CPDF_StreamAcc::DetachData() {
   if (m_pData.IsOwned()) {
     std::unique_ptr<uint8_t, FxFreeDeleter> p = m_pData.ReleaseAndClear();
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.h b/core/fpdfapi/parser/cpdf_stream_acc.h
index 2575427..cc1f632 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.h
+++ b/core/fpdfapi/parser/cpdf_stream_acc.h
@@ -39,6 +39,7 @@
   pdfium::span<uint8_t> GetSpan() const {
     return pdfium::make_span(GetData(), GetSize());
   }
+  ByteString ComputeDigest() const;
   ByteString GetImageDecoder() const { return m_ImageDecoder; }
   const CPDF_Dictionary* GetImageParam() const { return m_pImageParam.Get(); }
   std::unique_ptr<uint8_t, FxFreeDeleter> DetachData();
@@ -48,7 +49,6 @@
   ~CPDF_StreamAcc() override;
 
   void LoadAllData(bool bRawAccess, uint32_t estimated_size, bool bImageAcc);
-
   void ProcessRawData();
   void ProcessFilteredData(uint32_t estimated_size, bool bImageAcc);