diff --git a/core/fdrm/fx_crypt_sha.cpp b/core/fdrm/fx_crypt_sha.cpp
index eb429ab..33faec5 100644
--- a/core/fdrm/fx_crypt_sha.cpp
+++ b/core/fdrm/fx_crypt_sha.cpp
@@ -296,7 +296,8 @@
     0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL,
 });
 
-void sha384_process(CRYPT_sha2_context* ctx, const uint8_t data[128]) {
+void sha384_process(CRYPT_sha2_context* ctx,
+                    pdfium::span<const uint8_t, 128> data) {
   std::array<uint64_t, 80> W;
   SHA_GET_UINT64(W[0], data, 0);
   SHA_GET_UINT64(W[1], data, 8);
@@ -513,40 +514,39 @@
 }
 
 void CRYPT_SHA384Update(CRYPT_sha2_context* context,
-                        const uint8_t* data,
-                        uint32_t size) {
-  if (!size)
+                        pdfium::span<const uint8_t> data) {
+  if (data.empty()) {
     return;
-
+  }
+  const auto buffer_span = pdfium::make_span(context->buffer);
   uint32_t left = context->total_bytes & 0x7F;
   uint32_t fill = 128 - left;
-  context->total_bytes += size;
-  if (left && size >= fill) {
-    UNSAFE_TODO(FXSYS_memcpy(context->buffer + left, data, fill));
-    sha384_process(context, context->buffer);
-    size -= fill;
-    UNSAFE_TODO(data += fill);
+  context->total_bytes += data.size();
+  if (left && data.size() >= fill) {
+    fxcrt::spancpy(buffer_span.subspan(left), data.first(fill));
+    sha384_process(context, buffer_span);
+    data = data.subspan(fill);
     left = 0;
   }
-  while (size >= 128) {
+  while (data.size() >= 128) {
     sha384_process(context, data);
-    size -= 128;
-    UNSAFE_TODO(data += 128);
+    data = data.subspan(128);
   }
-  if (size) {
-    UNSAFE_TODO(FXSYS_memcpy(context->buffer + left, data, size));
+  if (!data.empty()) {
+    fxcrt::spancpy(buffer_span.subspan(left), data);
   }
 }
 
-void CRYPT_SHA384Finish(CRYPT_sha2_context* context, uint8_t digest[48]) {
+void CRYPT_SHA384Finish(CRYPT_sha2_context* context,
+                        pdfium::span<uint8_t, 48> digest) {
   uint8_t msglen[16];
   uint64_t total_bits = 8 * context->total_bytes;  // Prior to padding.
   SHA_PUT_UINT64(0ULL, msglen, 0);
   SHA_PUT_UINT64(total_bits, msglen, 8);
   uint32_t last = context->total_bytes & 0x7F;
   uint32_t padn = (last < 112) ? (112 - last) : (240 - last);
-  CRYPT_SHA384Update(context, kSha384Padding, padn);
-  CRYPT_SHA384Update(context, msglen, 16);
+  CRYPT_SHA384Update(context, pdfium::make_span(kSha384Padding).first(padn));
+  CRYPT_SHA384Update(context, msglen);
   SHA_PUT_UINT64(context->state[0], digest, 0);
   SHA_PUT_UINT64(context->state[1], digest, 8);
   SHA_PUT_UINT64(context->state[2], digest, 16);
@@ -555,12 +555,11 @@
   SHA_PUT_UINT64(context->state[5], digest, 40);
 }
 
-void CRYPT_SHA384Generate(const uint8_t* data,
-                          uint32_t size,
-                          uint8_t digest[48]) {
+void CRYPT_SHA384Generate(pdfium::span<const uint8_t> data,
+                          pdfium::span<uint8_t, 48> digest) {
   CRYPT_sha2_context context;
   CRYPT_SHA384Start(&context);
-  CRYPT_SHA384Update(&context, data, size);
+  CRYPT_SHA384Update(&context, data);
   CRYPT_SHA384Finish(&context, digest);
 }
 
@@ -578,20 +577,20 @@
 }
 
 void CRYPT_SHA512Update(CRYPT_sha2_context* context,
-                        const uint8_t* data,
-                        uint32_t size) {
-  CRYPT_SHA384Update(context, data, size);
+                        pdfium::span<const uint8_t> data) {
+  CRYPT_SHA384Update(context, data);
 }
 
-void CRYPT_SHA512Finish(CRYPT_sha2_context* context, uint8_t digest[64]) {
+void CRYPT_SHA512Finish(CRYPT_sha2_context* context,
+                        pdfium::span<uint8_t, 64> digest) {
   uint8_t msglen[16];
   uint64_t total_bits = 8 * context->total_bytes;
   SHA_PUT_UINT64(0ULL, msglen, 0);
   SHA_PUT_UINT64(total_bits, msglen, 8);
   uint32_t last = context->total_bytes & 0x7F;
   uint32_t padn = (last < 112) ? (112 - last) : (240 - last);
-  CRYPT_SHA512Update(context, kSha384Padding, padn);
-  CRYPT_SHA512Update(context, msglen, 16);
+  CRYPT_SHA512Update(context, pdfium::make_span(kSha384Padding).first(padn));
+  CRYPT_SHA512Update(context, msglen);
   SHA_PUT_UINT64(context->state[0], digest, 0);
   SHA_PUT_UINT64(context->state[1], digest, 8);
   SHA_PUT_UINT64(context->state[2], digest, 16);
@@ -602,11 +601,10 @@
   SHA_PUT_UINT64(context->state[7], digest, 56);
 }
 
-void CRYPT_SHA512Generate(const uint8_t* data,
-                          uint32_t size,
-                          uint8_t digest[64]) {
+void CRYPT_SHA512Generate(pdfium::span<const uint8_t> data,
+                          pdfium::span<uint8_t, 64> digest) {
   CRYPT_sha2_context context;
   CRYPT_SHA512Start(&context);
-  CRYPT_SHA512Update(&context, data, size);
+  CRYPT_SHA512Update(&context, data);
   CRYPT_SHA512Finish(&context, digest);
 }
diff --git a/core/fdrm/fx_crypt_sha.h b/core/fdrm/fx_crypt_sha.h
index b4af2a1..4e08e1a 100644
--- a/core/fdrm/fx_crypt_sha.h
+++ b/core/fdrm/fx_crypt_sha.h
@@ -44,20 +44,18 @@
 
 void CRYPT_SHA384Start(CRYPT_sha2_context* context);
 void CRYPT_SHA384Update(CRYPT_sha2_context* context,
-                        const uint8_t* data,
-                        uint32_t size);
-void CRYPT_SHA384Finish(CRYPT_sha2_context* context, uint8_t digest[48]);
-void CRYPT_SHA384Generate(const uint8_t* data,
-                          uint32_t size,
-                          uint8_t digest[48]);
+                        pdfium::span<const uint8_t> data);
+void CRYPT_SHA384Finish(CRYPT_sha2_context* context,
+                        pdfium::span<uint8_t, 48> digest);
+void CRYPT_SHA384Generate(pdfium::span<const uint8_t> data,
+                          pdfium::span<uint8_t, 48> digest);
 
 void CRYPT_SHA512Start(CRYPT_sha2_context* context);
 void CRYPT_SHA512Update(CRYPT_sha2_context* context,
-                        const uint8_t* data,
-                        uint32_t size);
-void CRYPT_SHA512Finish(CRYPT_sha2_context* context, uint8_t digest[64]);
-void CRYPT_SHA512Generate(const uint8_t* data,
-                          uint32_t size,
-                          uint8_t digest[64]);
+                        pdfium::span<const uint8_t> data);
+void CRYPT_SHA512Finish(CRYPT_sha2_context* context,
+                        pdfium::span<uint8_t, 64> digest);
+void CRYPT_SHA512Generate(pdfium::span<const uint8_t> data,
+                          pdfium::span<uint8_t, 64> digest);
 
 #endif  // CORE_FDRM_FX_CRYPT_SHA_H_
diff --git a/core/fdrm/fx_crypt_unittest.cpp b/core/fdrm/fx_crypt_unittest.cpp
index 4a4d0b6..aa19922 100644
--- a/core/fdrm/fx_crypt_unittest.cpp
+++ b/core/fdrm/fx_crypt_unittest.cpp
@@ -492,8 +492,7 @@
 TEST(FXCRYPT, Sha384Empty) {
   static const char kInput[] = "";
   uint8_t actual[48];
-  CRYPT_SHA384Generate(reinterpret_cast<const uint8_t*>(kInput), strlen(kInput),
-                       actual);
+  CRYPT_SHA384Generate(ByteStringView(kInput).unsigned_span(), actual);
   EXPECT_THAT(
       actual,
       ElementsAre(0x38, 0xb0, 0x60, 0xa7, 0x51, 0xac, 0x96, 0x38, 0x4c, 0xd9,
@@ -508,8 +507,7 @@
   static const char kInput[] =
       "This is a simple test. To see whether it is getting correct value.";
   uint8_t actual[48];
-  CRYPT_SHA384Generate(reinterpret_cast<const uint8_t*>(kInput), strlen(kInput),
-                       actual);
+  CRYPT_SHA384Generate(ByteStringView(kInput).unsigned_span(), actual);
   EXPECT_THAT(
       actual,
       ElementsAre(0x95, 0x54, 0xff, 0xd3, 0x89, 0xf0, 0xd6, 0x42, 0xe9, 0x33,
@@ -526,8 +524,7 @@
       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   uint8_t actual[48];
   EXPECT_EQ(112u, strlen(kInput));
-  CRYPT_SHA384Generate(reinterpret_cast<const uint8_t*>(kInput), strlen(kInput),
-                       actual);
+  CRYPT_SHA384Generate(ByteStringView(kInput).unsigned_span(), actual);
   EXPECT_THAT(
       actual,
       ElementsAre(0x18, 0x7d, 0x4e, 0x07, 0xcb, 0x30, 0x61, 0x03, 0xc6, 0x99,
@@ -540,8 +537,7 @@
 TEST(FXCRYPT, Sha512Empty) {
   static const char kInput[] = "";
   uint8_t actual[64];
-  CRYPT_SHA512Generate(reinterpret_cast<const uint8_t*>(kInput), strlen(kInput),
-                       actual);
+  CRYPT_SHA512Generate(ByteStringView(kInput).unsigned_span(), actual);
   EXPECT_THAT(
       actual,
       ElementsAre(0xcf, 0x83, 0xe1, 0x35, 0x7e, 0xef, 0xb8, 0xbd, 0xf1, 0x54,
@@ -558,8 +554,7 @@
   static const char kInput[] =
       "This is a simple test. To see whether it is getting correct value.";
   uint8_t actual[64];
-  CRYPT_SHA512Generate(reinterpret_cast<const uint8_t*>(kInput), strlen(kInput),
-                       actual);
+  CRYPT_SHA512Generate(ByteStringView(kInput).unsigned_span(), actual);
   EXPECT_THAT(
       actual,
       ElementsAre(0x86, 0xB5, 0x05, 0x63, 0xA2, 0x6F, 0xD6, 0xFA, 0xEB, 0x9B,
@@ -578,8 +573,7 @@
       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   EXPECT_EQ(112u, strlen(kInput));
   uint8_t actual[64];
-  CRYPT_SHA512Generate(reinterpret_cast<const uint8_t*>(kInput), strlen(kInput),
-                       actual);
+  CRYPT_SHA512Generate(ByteStringView(kInput).unsigned_span(), actual);
   EXPECT_THAT(
       actual,
       ElementsAre(0xc0, 0x1d, 0x08, 0x0e, 0xfd, 0x49, 0x27, 0x76, 0xa1, 0xc4,
diff --git a/core/fpdfapi/parser/cpdf_security_handler.cpp b/core/fpdfapi/parser/cpdf_security_handler.cpp
index 28d76aa..25b8645 100644
--- a/core/fpdfapi/parser/cpdf_security_handler.cpp
+++ b/core/fpdfapi/parser/cpdf_security_handler.cpp
@@ -175,11 +175,9 @@
     if (iHash == 0) {
       CRYPT_SHA256Generate(encrypted_output_span, inter_digest);
     } else if (iHash == 1) {
-      CRYPT_SHA384Generate(encrypted_output_span.data(),
-                           encrypted_output_span.size(), input);
+      CRYPT_SHA384Generate(encrypted_output_span, inter_digest);
     } else if (iHash == 2) {
-      CRYPT_SHA512Generate(encrypted_output_span.data(),
-                           encrypted_output_span.size(), input);
+      CRYPT_SHA512Generate(encrypted_output_span, inter_digest);
     }
     key = input;
     iv = UNSAFE_TODO(input + 16);
