// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "core/include/fdrm/fx_crypt.h"

#ifdef __cplusplus
extern "C" {
#endif
struct rc4_state {
  int x, y, m[256];
};
void CRYPT_ArcFourSetup(void* context, const uint8_t* key, FX_DWORD length) {
  rc4_state* s = (rc4_state*)context;
  int i, j, k, *m, a;
  s->x = 0;
  s->y = 0;
  m = s->m;
  for (i = 0; i < 256; i++) {
    m[i] = i;
  }
  j = k = 0;
  for (i = 0; i < 256; i++) {
    a = m[i];
    j = (j + a + key[k]) & 0xFF;
    m[i] = m[j];
    m[j] = a;
    if (++k >= (int)length) {
      k = 0;
    }
  }
}
void CRYPT_ArcFourCrypt(void* context, unsigned char* data, FX_DWORD length) {
  struct rc4_state* s = (struct rc4_state*)context;
  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];
  }
  s->x = x;
  s->y = y;
}
void CRYPT_ArcFourCryptBlock(uint8_t* pData,
                             FX_DWORD size,
                             const uint8_t* key,
                             FX_DWORD keylen) {
  rc4_state s;
  CRYPT_ArcFourSetup(&s, key, keylen);
  CRYPT_ArcFourCrypt(&s, pData, size);
}
struct md5_context {
  FX_DWORD total[2];
  FX_DWORD state[4];
  uint8_t buffer[64];
};
#define GET_FX_DWORD(n, b, i)                          \
  {                                                    \
    (n) = (FX_DWORD)((uint8_t*)b)[(i)] |               \
          (((FX_DWORD)((uint8_t*)b)[(i) + 1]) << 8) |  \
          (((FX_DWORD)((uint8_t*)b)[(i) + 2]) << 16) | \
          (((FX_DWORD)((uint8_t*)b)[(i) + 3]) << 24);  \
  }
#define PUT_FX_DWORD(n, b, i)                                 \
  {                                                           \
    (((uint8_t*)b)[(i)]) = (uint8_t)(((n)) & 0xFF);           \
    (((uint8_t*)b)[(i) + 1]) = (uint8_t)(((n) >> 8) & 0xFF);  \
    (((uint8_t*)b)[(i) + 2]) = (uint8_t)(((n) >> 16) & 0xFF); \
    (((uint8_t*)b)[(i) + 3]) = (uint8_t)(((n) >> 24) & 0xFF); \
  }
void md5_process(struct md5_context* ctx, const uint8_t data[64]) {
  FX_DWORD A, B, C, D, X[16];
  GET_FX_DWORD(X[0], data, 0);
  GET_FX_DWORD(X[1], data, 4);
  GET_FX_DWORD(X[2], data, 8);
  GET_FX_DWORD(X[3], data, 12);
  GET_FX_DWORD(X[4], data, 16);
  GET_FX_DWORD(X[5], data, 20);
  GET_FX_DWORD(X[6], data, 24);
  GET_FX_DWORD(X[7], data, 28);
  GET_FX_DWORD(X[8], data, 32);
  GET_FX_DWORD(X[9], data, 36);
  GET_FX_DWORD(X[10], data, 40);
  GET_FX_DWORD(X[11], data, 44);
  GET_FX_DWORD(X[12], data, 48);
  GET_FX_DWORD(X[13], data, 52);
  GET_FX_DWORD(X[14], data, 56);
  GET_FX_DWORD(X[15], data, 60);
#define S(x, n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
#define P(a, b, c, d, k, s, t)  \
  {                             \
    a += F(b, c, d) + X[k] + t; \
    a = S(a, s) + b;            \
  }
  A = ctx->state[0];
  B = ctx->state[1];
  C = ctx->state[2];
  D = ctx->state[3];
#define F(x, y, z) (z ^ (x & (y ^ z)))
  P(A, B, C, D, 0, 7, 0xD76AA478);
  P(D, A, B, C, 1, 12, 0xE8C7B756);
  P(C, D, A, B, 2, 17, 0x242070DB);
  P(B, C, D, A, 3, 22, 0xC1BDCEEE);
  P(A, B, C, D, 4, 7, 0xF57C0FAF);
  P(D, A, B, C, 5, 12, 0x4787C62A);
  P(C, D, A, B, 6, 17, 0xA8304613);
  P(B, C, D, A, 7, 22, 0xFD469501);
  P(A, B, C, D, 8, 7, 0x698098D8);
  P(D, A, B, C, 9, 12, 0x8B44F7AF);
  P(C, D, A, B, 10, 17, 0xFFFF5BB1);
  P(B, C, D, A, 11, 22, 0x895CD7BE);
  P(A, B, C, D, 12, 7, 0x6B901122);
  P(D, A, B, C, 13, 12, 0xFD987193);
  P(C, D, A, B, 14, 17, 0xA679438E);
  P(B, C, D, A, 15, 22, 0x49B40821);
#undef F
#define F(x, y, z) (y ^ (z & (x ^ y)))
  P(A, B, C, D, 1, 5, 0xF61E2562);
  P(D, A, B, C, 6, 9, 0xC040B340);
  P(C, D, A, B, 11, 14, 0x265E5A51);
  P(B, C, D, A, 0, 20, 0xE9B6C7AA);
  P(A, B, C, D, 5, 5, 0xD62F105D);
  P(D, A, B, C, 10, 9, 0x02441453);
  P(C, D, A, B, 15, 14, 0xD8A1E681);
  P(B, C, D, A, 4, 20, 0xE7D3FBC8);
  P(A, B, C, D, 9, 5, 0x21E1CDE6);
  P(D, A, B, C, 14, 9, 0xC33707D6);
  P(C, D, A, B, 3, 14, 0xF4D50D87);
  P(B, C, D, A, 8, 20, 0x455A14ED);
  P(A, B, C, D, 13, 5, 0xA9E3E905);
  P(D, A, B, C, 2, 9, 0xFCEFA3F8);
  P(C, D, A, B, 7, 14, 0x676F02D9);
  P(B, C, D, A, 12, 20, 0x8D2A4C8A);
#undef F
#define F(x, y, z) (x ^ y ^ z)
  P(A, B, C, D, 5, 4, 0xFFFA3942);
  P(D, A, B, C, 8, 11, 0x8771F681);
  P(C, D, A, B, 11, 16, 0x6D9D6122);
  P(B, C, D, A, 14, 23, 0xFDE5380C);
  P(A, B, C, D, 1, 4, 0xA4BEEA44);
  P(D, A, B, C, 4, 11, 0x4BDECFA9);
  P(C, D, A, B, 7, 16, 0xF6BB4B60);
  P(B, C, D, A, 10, 23, 0xBEBFBC70);
  P(A, B, C, D, 13, 4, 0x289B7EC6);
  P(D, A, B, C, 0, 11, 0xEAA127FA);
  P(C, D, A, B, 3, 16, 0xD4EF3085);
  P(B, C, D, A, 6, 23, 0x04881D05);
  P(A, B, C, D, 9, 4, 0xD9D4D039);
  P(D, A, B, C, 12, 11, 0xE6DB99E5);
  P(C, D, A, B, 15, 16, 0x1FA27CF8);
  P(B, C, D, A, 2, 23, 0xC4AC5665);
#undef F
#define F(x, y, z) (y ^ (x | ~z))
  P(A, B, C, D, 0, 6, 0xF4292244);
  P(D, A, B, C, 7, 10, 0x432AFF97);
  P(C, D, A, B, 14, 15, 0xAB9423A7);
  P(B, C, D, A, 5, 21, 0xFC93A039);
  P(A, B, C, D, 12, 6, 0x655B59C3);
  P(D, A, B, C, 3, 10, 0x8F0CCC92);
  P(C, D, A, B, 10, 15, 0xFFEFF47D);
  P(B, C, D, A, 1, 21, 0x85845DD1);
  P(A, B, C, D, 8, 6, 0x6FA87E4F);
  P(D, A, B, C, 15, 10, 0xFE2CE6E0);
  P(C, D, A, B, 6, 15, 0xA3014314);
  P(B, C, D, A, 13, 21, 0x4E0811A1);
  P(A, B, C, D, 4, 6, 0xF7537E82);
  P(D, A, B, C, 11, 10, 0xBD3AF235);
  P(C, D, A, B, 2, 15, 0x2AD7D2BB);
  P(B, C, D, A, 9, 21, 0xEB86D391);
#undef F
  ctx->state[0] += A;
  ctx->state[1] += B;
  ctx->state[2] += C;
  ctx->state[3] += D;
}
void CRYPT_MD5Start(void* context) {
  struct md5_context* ctx = (struct md5_context*)context;
  ctx->total[0] = 0;
  ctx->total[1] = 0;
  ctx->state[0] = 0x67452301;
  ctx->state[1] = 0xEFCDAB89;
  ctx->state[2] = 0x98BADCFE;
  ctx->state[3] = 0x10325476;
}
void CRYPT_MD5Update(void* pctx, const uint8_t* input, FX_DWORD length) {
  struct md5_context* ctx = (struct md5_context*)pctx;
  FX_DWORD left, fill;
  if (!length) {
    return;
  }
  left = (ctx->total[0] >> 3) & 0x3F;
  fill = 64 - left;
  ctx->total[0] += length << 3;
  ctx->total[1] += length >> 29;
  ctx->total[0] &= 0xFFFFFFFF;
  ctx->total[1] += ctx->total[0] < length << 3;
  if (left && length >= fill) {
    FXSYS_memcpy((void*)(ctx->buffer + left), (void*)input, fill);
    md5_process(ctx, ctx->buffer);
    length -= fill;
    input += fill;
    left = 0;
  }
  while (length >= 64) {
    md5_process(ctx, input);
    length -= 64;
    input += 64;
  }
  if (length) {
    FXSYS_memcpy((void*)(ctx->buffer + left), (void*)input, length);
  }
}
const uint8_t md5_padding[64] = {
    0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0,    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
void CRYPT_MD5Finish(void* pctx, uint8_t digest[16]) {
  struct md5_context* ctx = (struct md5_context*)pctx;
  FX_DWORD last, padn;
  uint8_t msglen[8];
  PUT_FX_DWORD(ctx->total[0], msglen, 0);
  PUT_FX_DWORD(ctx->total[1], msglen, 4);
  last = (ctx->total[0] >> 3) & 0x3F;
  padn = (last < 56) ? (56 - last) : (120 - last);
  CRYPT_MD5Update(ctx, md5_padding, padn);
  CRYPT_MD5Update(ctx, msglen, 8);
  PUT_FX_DWORD(ctx->state[0], digest, 0);
  PUT_FX_DWORD(ctx->state[1], digest, 4);
  PUT_FX_DWORD(ctx->state[2], digest, 8);
  PUT_FX_DWORD(ctx->state[3], digest, 12);
}
void CRYPT_MD5Generate(const uint8_t* input,
                       FX_DWORD length,
                       uint8_t digest[16]) {
  md5_context ctx;
  CRYPT_MD5Start(&ctx);
  CRYPT_MD5Update(&ctx, input, length);
  CRYPT_MD5Finish(&ctx, digest);
}
static FX_BOOL (*g_PubKeyDecryptor)(const uint8_t* pData,
                                    FX_DWORD size,
                                    uint8_t* data_buf,
                                    FX_DWORD& data_len) = NULL;
void CRYPT_SetPubKeyDecryptor(FX_BOOL (*func)(const uint8_t* pData,
                                              FX_DWORD size,
                                              uint8_t* data_buf,
                                              FX_DWORD& data_len)) {
  g_PubKeyDecryptor = func;
}
#ifdef __cplusplus
};
#endif
