summaryrefslogtreecommitdiff
path: root/core/fdrm/crypto
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2018-10-03 19:53:38 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-10-03 19:53:38 +0000
commitbd8855b27b43de3587b2040fee64236bf53a4238 (patch)
tree7fbb689bf5cfe7374dfd7b2c3ce60a4e33c35f5c /core/fdrm/crypto
parent2ff6cd661c0203dcdcc09135bce8bba141037574 (diff)
downloadpdfium-bd8855b27b43de3587b2040fee64236bf53a4238.tar.xz
Remove blocklen argument from CRYPT_AESSetKey()
We always pass it as 16. In turn, remove some unused code to handle the non-16 cases. Noticed while looking at coverage report. Change-Id: I93f5f0342537284ce6a2b36a8b477425da3cc872 Reviewed-on: https://pdfium-review.googlesource.com/c/43450 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'core/fdrm/crypto')
-rw-r--r--core/fdrm/crypto/fx_crypt.h1
-rw-r--r--core/fdrm/crypto/fx_crypt_aes.cpp197
2 files changed, 12 insertions, 186 deletions
diff --git a/core/fdrm/crypto/fx_crypt.h b/core/fdrm/crypto/fx_crypt.h
index 4f6717fed8..0c7484c256 100644
--- a/core/fdrm/crypto/fx_crypt.h
+++ b/core/fdrm/crypto/fx_crypt.h
@@ -60,7 +60,6 @@ void CRYPT_ArcFourCrypt(CRYPT_rc4_context* context,
uint32_t size);
void CRYPT_AESSetKey(CRYPT_aes_context* context,
- uint32_t blocklen,
const uint8_t* key,
uint32_t keylen,
bool bEncrypt);
diff --git a/core/fdrm/crypto/fx_crypt_aes.cpp b/core/fdrm/crypto/fx_crypt_aes.cpp
index 94d66d0956..467cc97213 100644
--- a/core/fdrm/crypto/fx_crypt_aes.cpp
+++ b/core/fdrm/crypto/fx_crypt_aes.cpp
@@ -431,13 +431,6 @@ const unsigned int D3[256] = {
#define ADD_ROUND_KEY_4 \
(block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
block[3] ^= *keysched++)
-#define ADD_ROUND_KEY_6 \
- (block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
- block[3] ^= *keysched++, block[4] ^= *keysched++, block[5] ^= *keysched++)
-#define ADD_ROUND_KEY_8 \
- (block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
- block[3] ^= *keysched++, block[4] ^= *keysched++, block[5] ^= *keysched++, \
- block[6] ^= *keysched++, block[7] ^= *keysched++)
#define MOVEWORD(i) (block[i] = newstate[i])
#undef MAKEWORD
#define MAKEWORD(i) \
@@ -478,88 +471,9 @@ void aes_encrypt_nb_4(CRYPT_aes_context* ctx, unsigned int* block) {
MOVEWORD(3);
ADD_ROUND_KEY_4;
}
-
-void aes_encrypt_nb_6(CRYPT_aes_context* ctx, unsigned int* block) {
- int i;
- const int C1 = 1, C2 = 2, C3 = 3, Nb = 6;
- unsigned int* keysched = ctx->keysched;
- unsigned int newstate[6];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_6;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MAKEWORD(4);
- MAKEWORD(5);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- }
- ADD_ROUND_KEY_6;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
- LASTWORD(4);
- LASTWORD(5);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- ADD_ROUND_KEY_6;
-}
-
-void aes_encrypt_nb_8(CRYPT_aes_context* ctx, unsigned int* block) {
- int i;
- const int C1 = 1, C2 = 3, C3 = 4, Nb = 8;
- unsigned int* keysched = ctx->keysched;
- unsigned int newstate[8];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_8;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MAKEWORD(4);
- MAKEWORD(5);
- MAKEWORD(6);
- MAKEWORD(7);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- MOVEWORD(6);
- MOVEWORD(7);
- }
- ADD_ROUND_KEY_8;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
- LASTWORD(4);
- LASTWORD(5);
- LASTWORD(6);
- LASTWORD(7);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- MOVEWORD(6);
- MOVEWORD(7);
- ADD_ROUND_KEY_8;
-}
#undef MAKEWORD
#undef LASTWORD
+
#define MAKEWORD(i) \
(newstate[i] = (D0[(block[i] >> 24) & 0xFF] ^ \
D1[(block[(i + C1) % Nb] >> 16) & 0xFF] ^ \
@@ -598,107 +512,20 @@ void aes_decrypt_nb_4(CRYPT_aes_context* ctx, unsigned int* block) {
MOVEWORD(3);
ADD_ROUND_KEY_4;
}
-
-void aes_decrypt_nb_6(CRYPT_aes_context* ctx, unsigned int* block) {
- int i;
- const int C1 = 6 - 1, C2 = 6 - 2, C3 = 6 - 3, Nb = 6;
- unsigned int* keysched = ctx->invkeysched;
- unsigned int newstate[6];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_6;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MAKEWORD(4);
- MAKEWORD(5);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- }
- ADD_ROUND_KEY_6;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
- LASTWORD(4);
- LASTWORD(5);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- ADD_ROUND_KEY_6;
-}
-
-void aes_decrypt_nb_8(CRYPT_aes_context* ctx, unsigned int* block) {
- int i;
- const int C1 = 8 - 1, C2 = 8 - 3, C3 = 8 - 4, Nb = 8;
- unsigned int* keysched = ctx->invkeysched;
- unsigned int newstate[8];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_8;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MAKEWORD(4);
- MAKEWORD(5);
- MAKEWORD(6);
- MAKEWORD(7);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- MOVEWORD(6);
- MOVEWORD(7);
- }
- ADD_ROUND_KEY_8;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
- LASTWORD(4);
- LASTWORD(5);
- LASTWORD(6);
- LASTWORD(7);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- MOVEWORD(6);
- MOVEWORD(7);
- ADD_ROUND_KEY_8;
-}
#undef MAKEWORD
#undef LASTWORD
+
void aes_setup(CRYPT_aes_context* ctx,
- int blocklen,
const unsigned char* key,
int keylen) {
- int i, j, Nk, rconst;
- ASSERT(blocklen == 16 || blocklen == 24 || blocklen == 32);
ASSERT(keylen == 16 || keylen == 24 || keylen == 32);
- Nk = keylen / 4;
- ctx->Nb = blocklen / 4;
+ int Nk = keylen / 4;
+ ctx->Nb = 4;
ctx->Nr = 6 + (ctx->Nb > Nk ? ctx->Nb : Nk);
- if (ctx->Nb == 8) {
- ctx->encrypt = aes_encrypt_nb_8, ctx->decrypt = aes_decrypt_nb_8;
- } else if (ctx->Nb == 6) {
- ctx->encrypt = aes_encrypt_nb_6, ctx->decrypt = aes_decrypt_nb_6;
- } else if (ctx->Nb == 4) {
- ctx->encrypt = aes_encrypt_nb_4, ctx->decrypt = aes_decrypt_nb_4;
- }
- rconst = 1;
- for (i = 0; i < (ctx->Nr + 1) * ctx->Nb; i++) {
+ ctx->encrypt = aes_encrypt_nb_4;
+ ctx->decrypt = aes_decrypt_nb_4;
+ int rconst = 1;
+ for (int i = 0; i < (ctx->Nr + 1) * ctx->Nb; i++) {
if (i < Nk) {
ctx->keysched[i] = GET_32BIT_MSB_FIRST(key + 4 * i);
} else {
@@ -728,8 +555,8 @@ void aes_setup(CRYPT_aes_context* ctx,
ctx->keysched[i] = ctx->keysched[i - Nk] ^ temp;
}
}
- for (i = 0; i <= ctx->Nr; i++) {
- for (j = 0; j < ctx->Nb; j++) {
+ for (int i = 0; i <= ctx->Nr; i++) {
+ for (int j = 0; j < ctx->Nb; j++) {
unsigned int temp;
temp = ctx->keysched[(ctx->Nr - i) * ctx->Nb + j];
if (i != 0 && i != ctx->Nr) {
@@ -747,6 +574,7 @@ void aes_setup(CRYPT_aes_context* ctx,
}
}
}
+
void aes_decrypt(CRYPT_aes_context* ctx, unsigned int* block) {
ctx->decrypt(ctx, block);
}
@@ -804,11 +632,10 @@ void aes_encrypt_cbc(unsigned char* dest,
} // namespace
void CRYPT_AESSetKey(CRYPT_aes_context* context,
- uint32_t blocklen,
const uint8_t* key,
uint32_t keylen,
bool bEncrypt) {
- aes_setup(context, blocklen, key, keylen);
+ aes_setup(context, key, keylen);
}
void CRYPT_AESSetIV(CRYPT_aes_context* context, const uint8_t* iv) {