From 28b44b03c133055ba82dc54bbde49b9627f9c3d9 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Wed, 3 May 2017 16:37:39 -0700 Subject: Clean up CRYPT_ArcFourCrypt(). Add a unit test too. Change-Id: I33bf1aea85aff3de50021462095b76edd4017f97 Reviewed-on: https://pdfium-review.googlesource.com/4870 Reviewed-by: Tom Sepez Commit-Queue: Lei Zhang --- core/fdrm/crypto/fx_crypt.cpp | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) (limited to 'core/fdrm/crypto/fx_crypt.cpp') diff --git a/core/fdrm/crypto/fx_crypt.cpp b/core/fdrm/crypto/fx_crypt.cpp index f5ebdf09d2..d53fa6ba7a 100644 --- a/core/fdrm/crypto/fx_crypt.cpp +++ b/core/fdrm/crypto/fx_crypt.cpp @@ -153,23 +153,13 @@ void CRYPT_ArcFourSetup(CRYPT_rc4_context* s, } } -void CRYPT_ArcFourCrypt(CRYPT_rc4_context* s, - unsigned char* data, - uint32_t length) { - int i, x, y, *m, a, b; - x = s->x; - y = s->y; - m = s->m; - for (i = 0; i < (int)length; i++) { - x = (x + 1) & 0xFF; - a = m[x]; - y = (y + a) & 0xFF; - m[x] = b = m[y]; - m[y] = a; - data[i] ^= m[(a + b) & 0xFF]; +void CRYPT_ArcFourCrypt(CRYPT_rc4_context* s, uint8_t* data, uint32_t length) { + for (uint32_t i = 0; i < length; ++i) { + s->x = (s->x + 1) & 0xFF; + s->y = (s->y + s->m[s->x]) & 0xFF; + std::swap(s->m[s->x], s->m[s->y]); + data[i] ^= s->m[(s->m[s->x] + s->m[s->y]) & 0xFF]; } - s->x = x; - s->y = y; } void CRYPT_ArcFourCryptBlock(uint8_t* pData, -- cgit v1.2.3