Revert "Use even more spans in fx_crypt_aes.cpp"

This reverts commit 8ff4ff79b65aeebc12bd1c6fcbbd275e460914b9.

Reason for revert: likely crbug.com/361709064 [1 of 2]

Original change's description:
> Use even more spans in fx_crypt_aes.cpp
>
> Avoids some UNSAFE_TODO() usage.
>
> Bug: 42271176
> Change-Id: Ifbcc7339145c9fee8347cf9f9c158f981115f896
> Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/121893
> Reviewed-by: Tom Sepez <tsepez@google.com>
> Reviewed-by: Lei Zhang <thestig@chromium.org>
> Commit-Queue: Tom Sepez <tsepez@chromium.org>

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: 42271176
Change-Id: I069a03ef22cb873bc61a5147d2f7ad24cc8f4c13
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/123730
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Tom Sepez <tsepez@google.com>
diff --git a/core/fdrm/fx_crypt_aes.cpp b/core/fdrm/fx_crypt_aes.cpp
index 95acb21..1f373d9 100644
--- a/core/fdrm/fx_crypt_aes.cpp
+++ b/core/fdrm/fx_crypt_aes.cpp
@@ -527,17 +527,18 @@
 
 }  // namespace
 
-void CRYPT_AESSetKey(CRYPT_aes_context* ctx, pdfium::span<const uint8_t> key) {
-  size_t keylen = key.size();
-  CHECK(keylen == 16 || keylen == 24 || keylen == 32);
-
-  int Nk = static_cast<int>(keylen / 4);
+void CRYPT_AESSetKey(CRYPT_aes_context* ctx,
+                     const uint8_t* key,
+                     uint32_t keylen) {
+  DCHECK(keylen == 16 || keylen == 24 || keylen == 32);
+  auto keyspan = UNSAFE_TODO(pdfium::make_span(key, keylen));
+  int Nk = keylen / 4;
   ctx->Nb = 4;
   ctx->Nr = 6 + (ctx->Nb > Nk ? ctx->Nb : Nk);
   int rconst = 1;
   for (int i = 0; i < (ctx->Nr + 1) * ctx->Nb; i++) {
     if (i < Nk) {
-      ctx->keysched[i] = fxcrt::GetUInt32MSBFirst(key.subspan(4 * i));
+      ctx->keysched[i] = fxcrt::GetUInt32MSBFirst(keyspan.subspan(4 * i));
     } else {
       uint32_t temp = ctx->keysched[i - 1];
       if (i % Nk == 0) {
@@ -582,9 +583,11 @@
   }
 }
 
-void CRYPT_AESSetIV(CRYPT_aes_context* ctx, pdfium::span<const uint8_t> iv) {
+void CRYPT_AESSetIV(CRYPT_aes_context* ctx, const uint8_t* iv) {
   for (int i = 0; i < ctx->Nb; i++) {
-    ctx->iv[i] = fxcrt::GetUInt32MSBFirst(iv.subspan(4u * i, 4u));
+    // TODO(tsepez): Pass actual span.
+    ctx->iv[i] = fxcrt::GetUInt32MSBFirst(
+        UNSAFE_TODO(pdfium::make_span(iv + 4 * i, 4u)));
   }
 }
 
diff --git a/core/fdrm/fx_crypt_aes.h b/core/fdrm/fx_crypt_aes.h
index cae3790..ab673d2 100644
--- a/core/fdrm/fx_crypt_aes.h
+++ b/core/fdrm/fx_crypt_aes.h
@@ -25,8 +25,10 @@
   std::array<uint32_t, kMaxNb> iv;
 };
 
-void CRYPT_AESSetKey(CRYPT_aes_context* ctx, pdfium::span<const uint8_t> key);
-void CRYPT_AESSetIV(CRYPT_aes_context* ctx, pdfium::span<const uint8_t> iv);
+void CRYPT_AESSetKey(CRYPT_aes_context* ctx,
+                     const uint8_t* key,
+                     uint32_t keylen);
+void CRYPT_AESSetIV(CRYPT_aes_context* ctx, const uint8_t* iv);
 void CRYPT_AESDecrypt(CRYPT_aes_context* ctx,
                       uint8_t* dest,
                       const uint8_t* src,
diff --git a/core/fpdfapi/parser/cpdf_crypto_handler.cpp b/core/fpdfapi/parser/cpdf_crypto_handler.cpp
index 91f58e6..86f2ec7 100644
--- a/core/fpdfapi/parser/cpdf_crypto_handler.cpp
+++ b/core/fpdfapi/parser/cpdf_crypto_handler.cpp
@@ -69,9 +69,7 @@
   }
   if (m_Cipher == Cipher::kAES) {
     CRYPT_AESSetKey(m_pAESContext.get(),
-                    m_KeyLen == 32
-                        ? pdfium::span<const uint8_t>(m_EncryptKey)
-                        : pdfium::span<const uint8_t>(realkey).first(m_KeyLen));
+                    m_KeyLen == 32 ? m_EncryptKey.data() : realkey, m_KeyLen);
 
     constexpr size_t kIVSize = 16;
     constexpr size_t kPaddingSize = 16;
@@ -87,7 +85,8 @@
     for (auto& v : dest_iv_span) {
       v = static_cast<uint8_t>(rand());
     }
-    CRYPT_AESSetIV(m_pAESContext.get(), dest_iv_span);
+    CRYPT_AESSetIV(m_pAESContext.get(), dest_iv_span.data());
+
     CRYPT_AESEncrypt(m_pAESContext.get(), dest_data_span,
                      source.first(source_data_size));
 
@@ -118,7 +117,7 @@
     AESCryptContext* pContext = FX_Alloc(AESCryptContext, 1);
     pContext->m_bIV = true;
     pContext->m_BlockOffset = 0;
-    CRYPT_AESSetKey(&pContext->m_Context, m_EncryptKey);
+    CRYPT_AESSetKey(&pContext->m_Context, m_EncryptKey.data(), 32);
     return pContext;
   }
   uint8_t key1[48];
@@ -137,7 +136,7 @@
     AESCryptContext* pContext = FX_Alloc(AESCryptContext, 1);
     pContext->m_bIV = true;
     pContext->m_BlockOffset = 0;
-    CRYPT_AESSetKey(&pContext->m_Context, realkey);
+    CRYPT_AESSetKey(&pContext->m_Context, realkey, 16);
     return pContext;
   }
   CRYPT_rc4_context* pContext = FX_Alloc(CRYPT_rc4_context, 1);
diff --git a/core/fpdfapi/parser/cpdf_security_handler.cpp b/core/fpdfapi/parser/cpdf_security_handler.cpp
index ec3694a..c03d5db 100644
--- a/core/fpdfapi/parser/cpdf_security_handler.cpp
+++ b/core/fpdfapi/parser/cpdf_security_handler.cpp
@@ -150,8 +150,12 @@
       }
     }
     CHECK_EQ(content.size(), encrypted_output.size());
-    CRYPT_AESSetKey(&aes, input.first<16u>());
-    CRYPT_AESSetIV(&aes, input.subspan<16u>());
+    {
+      pdfium::span<uint8_t> key = input.first<16u>();
+      pdfium::span<uint8_t> iv = input.subspan<16u>();
+      CRYPT_AESSetKey(&aes, key.data(), 16);
+      CRYPT_AESSetIV(&aes, iv.data());
+    }
     CRYPT_AESEncrypt(&aes, encrypted_output_span, content);
 
     input = pdfium::span<uint8_t>();  // Dangling after assignments below.
@@ -362,11 +366,11 @@
     return false;
 
   CRYPT_aes_context aes = {};
-  CRYPT_AESSetKey(&aes, digest);
+  CRYPT_AESSetKey(&aes, digest, sizeof(digest));
   uint8_t iv[16] = {};
   CRYPT_AESSetIV(&aes, iv);
   CRYPT_AESDecrypt(&aes, m_EncryptKey.data(), ekey.unsigned_str(), 32);
-  CRYPT_AESSetKey(&aes, m_EncryptKey);
+  CRYPT_AESSetKey(&aes, m_EncryptKey.data(), m_EncryptKey.size());
   CRYPT_AESSetIV(&aes, iv);
   ByteString perms = m_pEncryptDict->GetByteStringFor("Perms");
   if (perms.IsEmpty())
@@ -644,7 +648,7 @@
     CRYPT_SHA256Finish(&sha2, pdfium::make_span(digest1).first<32>());
   }
   CRYPT_aes_context aes = {};
-  CRYPT_AESSetKey(&aes, pdfium::make_span(digest1).first<32u>());
+  CRYPT_AESSetKey(&aes, digest1, 32);
   uint8_t iv[16] = {};
   CRYPT_AESSetIV(&aes, iv);
   CRYPT_AESEncrypt(&aes, digest1, m_EncryptKey);
@@ -675,7 +679,7 @@
               pdfium::make_span(buf).subspan<12, 4>());
 
   CRYPT_aes_context aes = {};
-  CRYPT_AESSetKey(&aes, m_EncryptKey);
+  CRYPT_AESSetKey(&aes, m_EncryptKey.data(), m_EncryptKey.size());
 
   uint8_t iv[16] = {};
   CRYPT_AESSetIV(&aes, iv);