// 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 "../../../include/fxcrt/fx_basic.h"
#include "../../../include/fdrm/fx_crypt.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
    unsigned int h[5];
    unsigned char block[64];
    int blkused;
    unsigned int lenhi, lenlo;
} SHA_State;
#define rol(x,y) ( ((x) << (y)) | (((unsigned int)x) >> (32-y)) )
static void SHA_Core_Init(unsigned int h[5])
{
    h[0] = 0x67452301;
    h[1] = 0xefcdab89;
    h[2] = 0x98badcfe;
    h[3] = 0x10325476;
    h[4] = 0xc3d2e1f0;
}
static void SHATransform(unsigned int * digest, unsigned int * block)
{
    unsigned int w[80];
    unsigned int a, b, c, d, e;
    int t;
    for (t = 0; t < 16; t++) {
        w[t] = block[t];
    }
    for (t = 16; t < 80; t++) {
        unsigned int tmp = w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16];
        w[t] = rol(tmp, 1);
    }
    a = digest[0];
    b = digest[1];
    c = digest[2];
    d = digest[3];
    e = digest[4];
    for (t = 0; t < 20; t++) {
        unsigned int tmp =
            rol(a, 5) + ((b & c) | (d & ~b)) + e + w[t] + 0x5a827999;
        e = d;
        d = c;
        c = rol(b, 30);
        b = a;
        a = tmp;
    }
    for (t = 20; t < 40; t++) {
        unsigned int tmp = rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0x6ed9eba1;
        e = d;
        d = c;
        c = rol(b, 30);
        b = a;
        a = tmp;
    }
    for (t = 40; t < 60; t++) {
        unsigned int tmp = rol(a,
                               5) + ((b & c) | (b & d) | (c & d)) + e + w[t] +
                           0x8f1bbcdc;
        e = d;
        d = c;
        c = rol(b, 30);
        b = a;
        a = tmp;
    }
    for (t = 60; t < 80; t++) {
        unsigned int tmp = rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0xca62c1d6;
        e = d;
        d = c;
        c = rol(b, 30);
        b = a;
        a = tmp;
    }
    digest[0] += a;
    digest[1] += b;
    digest[2] += c;
    digest[3] += d;
    digest[4] += e;
}
void CRYPT_SHA1Start(FX_LPVOID context)
{
    SHA_State * s = (SHA_State*)context;
    SHA_Core_Init(s->h);
    s->blkused = 0;
    s->lenhi = s->lenlo = 0;
}
void CRYPT_SHA1Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size)
{
    SHA_State * s = (SHA_State*)context;
    unsigned char *q = (unsigned char *)data;
    unsigned int wordblock[16];
    int len = size;
    unsigned int lenw = len;
    int i;
    s->lenlo += lenw;
    s->lenhi += (s->lenlo < lenw);
    if (s->blkused && s->blkused + len < 64) {
        FXSYS_memcpy32(s->block + s->blkused, q, len);
        s->blkused += len;
    } else {
        while (s->blkused + len >= 64) {
            FXSYS_memcpy32(s->block + s->blkused, q, 64 - s->blkused);
            q += 64 - s->blkused;
            len -= 64 - s->blkused;
            for (i = 0; i < 16; i++) {
                wordblock[i] =
                    (((unsigned int) s->block[i * 4 + 0]) << 24) |
                    (((unsigned int) s->block[i * 4 + 1]) << 16) |
                    (((unsigned int) s->block[i * 4 + 2]) << 8) |
                    (((unsigned int) s->block[i * 4 + 3]) << 0);
            }
            SHATransform(s->h, wordblock);
            s->blkused = 0;
        }
        FXSYS_memcpy32(s->block, q, len);
        s->blkused = len;
    }
}
void CRYPT_SHA1Finish(FX_LPVOID context, FX_BYTE digest[20])
{
    SHA_State * s = (SHA_State*)context;
    int i;
    int pad;
    unsigned char c[64];
    unsigned int lenhi, lenlo;
    if (s->blkused >= 56) {
        pad = 56 + 64 - s->blkused;
    } else {
        pad = 56 - s->blkused;
    }
    lenhi = (s->lenhi << 3) | (s->lenlo >> (32 - 3));
    lenlo = (s->lenlo << 3);
    FXSYS_memset32(c, 0, pad);
    c[0] = 0x80;
    CRYPT_SHA1Update(s, c, pad);
    c[0] = (lenhi >> 24) & 0xFF;
    c[1] = (lenhi >> 16) & 0xFF;
    c[2] = (lenhi >> 8) & 0xFF;
    c[3] = (lenhi >> 0) & 0xFF;
    c[4] = (lenlo >> 24) & 0xFF;
    c[5] = (lenlo >> 16) & 0xFF;
    c[6] = (lenlo >> 8) & 0xFF;
    c[7] = (lenlo >> 0) & 0xFF;
    CRYPT_SHA1Update(s, c, 8);
    for (i = 0; i < 5; i++) {
        digest[i * 4] = (s->h[i] >> 24) & 0xFF;
        digest[i * 4 + 1] = (s->h[i] >> 16) & 0xFF;
        digest[i * 4 + 2] = (s->h[i] >> 8) & 0xFF;
        digest[i * 4 + 3] = (s->h[i]) & 0xFF;
    }
}
void CRYPT_SHA1Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[20])
{
    SHA_State s;
    CRYPT_SHA1Start(&s);
    CRYPT_SHA1Update(&s, data, size);
    CRYPT_SHA1Finish(&s, digest);
}
typedef struct {
    FX_DWORD total[2];
    FX_DWORD state[8];
    FX_BYTE buffer[64];
}
sha256_context;
#define GET_FX_DWORD(n,b,i)                       \
    {                                               \
        (n) = ( (FX_DWORD) (b)[(i)    ] << 24 )       \
              | ( (FX_DWORD) (b)[(i) + 1] << 16 )       \
              | ( (FX_DWORD) (b)[(i) + 2] <<  8 )       \
              | ( (FX_DWORD) (b)[(i) + 3]       );      \
    }
#define PUT_FX_DWORD(n,b,i)                       \
    {                                               \
        (b)[(i)    ] = (FX_BYTE) ( (n) >> 24 );       \
        (b)[(i) + 1] = (FX_BYTE) ( (n) >> 16 );       \
        (b)[(i) + 2] = (FX_BYTE) ( (n) >>  8 );       \
        (b)[(i) + 3] = (FX_BYTE) ( (n)       );       \
    }
void CRYPT_SHA256Start( FX_LPVOID context )
{
    sha256_context *ctx = (sha256_context *)context;
    ctx->total[0] = 0;
    ctx->total[1] = 0;
    ctx->state[0] = 0x6A09E667;
    ctx->state[1] = 0xBB67AE85;
    ctx->state[2] = 0x3C6EF372;
    ctx->state[3] = 0xA54FF53A;
    ctx->state[4] = 0x510E527F;
    ctx->state[5] = 0x9B05688C;
    ctx->state[6] = 0x1F83D9AB;
    ctx->state[7] = 0x5BE0CD19;
}
static void sha256_process( sha256_context *ctx, const FX_BYTE data[64] )
{
    FX_DWORD temp1, temp2, W[64];
    FX_DWORD A, B, C, D, E, F, G, H;
    GET_FX_DWORD( W[0],  data,  0 );
    GET_FX_DWORD( W[1],  data,  4 );
    GET_FX_DWORD( W[2],  data,  8 );
    GET_FX_DWORD( W[3],  data, 12 );
    GET_FX_DWORD( W[4],  data, 16 );
    GET_FX_DWORD( W[5],  data, 20 );
    GET_FX_DWORD( W[6],  data, 24 );
    GET_FX_DWORD( W[7],  data, 28 );
    GET_FX_DWORD( W[8],  data, 32 );
    GET_FX_DWORD( W[9],  data, 36 );
    GET_FX_DWORD( W[10], data, 40 );
    GET_FX_DWORD( W[11], data, 44 );
    GET_FX_DWORD( W[12], data, 48 );
    GET_FX_DWORD( W[13], data, 52 );
    GET_FX_DWORD( W[14], data, 56 );
    GET_FX_DWORD( W[15], data, 60 );
#define  SHR(x,n) ((x & 0xFFFFFFFF) >> n)
#define ROTR(x,n) (SHR(x,n) | (x << (32 - n)))
#define S0(x) (ROTR(x, 7) ^ ROTR(x,18) ^  SHR(x, 3))
#define S1(x) (ROTR(x,17) ^ ROTR(x,19) ^  SHR(x,10))
#define S2(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22))
#define S3(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25))
#define F0(x,y,z) ((x & y) | (z & (x | y)))
#define F1(x,y,z) (z ^ (x & (y ^ z)))
#define R(t)                                    \
    (                                               \
            W[t] = S1(W[t -  2]) + W[t -  7] +          \
                   S0(W[t - 15]) + W[t - 16]            \
    )
#define P(a,b,c,d,e,f,g,h,x,K)                  \
    {                                               \
        temp1 = h + S3(e) + F1(e,f,g) + K + x;      \
        temp2 = S2(a) + F0(a,b,c);                  \
        d += temp1; h = temp1 + temp2;              \
    }
    A = ctx->state[0];
    B = ctx->state[1];
    C = ctx->state[2];
    D = ctx->state[3];
    E = ctx->state[4];
    F = ctx->state[5];
    G = ctx->state[6];
    H = ctx->state[7];
    P( A, B, C, D, E, F, G, H, W[ 0], 0x428A2F98 );
    P( H, A, B, C, D, E, F, G, W[ 1], 0x71374491 );
    P( G, H, A, B, C, D, E, F, W[ 2], 0xB5C0FBCF );
    P( F, G, H, A, B, C, D, E, W[ 3], 0xE9B5DBA5 );
    P( E, F, G, H, A, B, C, D, W[ 4], 0x3956C25B );
    P( D, E, F, G, H, A, B, C, W[ 5], 0x59F111F1 );
    P( C, D, E, F, G, H, A, B, W[ 6], 0x923F82A4 );
    P( B, C, D, E, F, G, H, A, W[ 7], 0xAB1C5ED5 );
    P( A, B, C, D, E, F, G, H, W[ 8], 0xD807AA98 );
    P( H, A, B, C, D, E, F, G, W[ 9], 0x12835B01 );
    P( G, H, A, B, C, D, E, F, W[10], 0x243185BE );
    P( F, G, H, A, B, C, D, E, W[11], 0x550C7DC3 );
    P( E, F, G, H, A, B, C, D, W[12], 0x72BE5D74 );
    P( D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE );
    P( C, D, E, F, G, H, A, B, W[14], 0x9BDC06A7 );
    P( B, C, D, E, F, G, H, A, W[15], 0xC19BF174 );
    P( A, B, C, D, E, F, G, H, R(16), 0xE49B69C1 );
    P( H, A, B, C, D, E, F, G, R(17), 0xEFBE4786 );
    P( G, H, A, B, C, D, E, F, R(18), 0x0FC19DC6 );
    P( F, G, H, A, B, C, D, E, R(19), 0x240CA1CC );
    P( E, F, G, H, A, B, C, D, R(20), 0x2DE92C6F );
    P( D, E, F, G, H, A, B, C, R(21), 0x4A7484AA );
    P( C, D, E, F, G, H, A, B, R(22), 0x5CB0A9DC );
    P( B, C, D, E, F, G, H, A, R(23), 0x76F988DA );
    P( A, B, C, D, E, F, G, H, R(24), 0x983E5152 );
    P( H, A, B, C, D, E, F, G, R(25), 0xA831C66D );
    P( G, H, A, B, C, D, E, F, R(26), 0xB00327C8 );
    P( F, G, H, A, B, C, D, E, R(27), 0xBF597FC7 );
    P( E, F, G, H, A, B, C, D, R(28), 0xC6E00BF3 );
    P( D, E, F, G, H, A, B, C, R(29), 0xD5A79147 );
    P( C, D, E, F, G, H, A, B, R(30), 0x06CA6351 );
    P( B, C, D, E, F, G, H, A, R(31), 0x14292967 );
    P( A, B, C, D, E, F, G, H, R(32), 0x27B70A85 );
    P( H, A, B, C, D, E, F, G, R(33), 0x2E1B2138 );
    P( G, H, A, B, C, D, E, F, R(34), 0x4D2C6DFC );
    P( F, G, H, A, B, C, D, E, R(35), 0x53380D13 );
    P( E, F, G, H, A, B, C, D, R(36), 0x650A7354 );
    P( D, E, F, G, H, A, B, C, R(37), 0x766A0ABB );
    P( C, D, E, F, G, H, A, B, R(38), 0x81C2C92E );
    P( B, C, D, E, F, G, H, A, R(39), 0x92722C85 );
    P( A, B, C, D, E, F, G, H, R(40), 0xA2BFE8A1 );
    P( H, A, B, C, D, E, F, G, R(41), 0xA81A664B );
    P( G, H, A, B, C, D, E, F, R(42), 0xC24B8B70 );
    P( F, G, H, A, B, C, D, E, R(43), 0xC76C51A3 );
    P( E, F, G, H, A, B, C, D, R(44), 0xD192E819 );
    P( D, E, F, G, H, A, B, C, R(45), 0xD6990624 );
    P( C, D, E, F, G, H, A, B, R(46), 0xF40E3585 );
    P( B, C, D, E, F, G, H, A, R(47), 0x106AA070 );
    P( A, B, C, D, E, F, G, H, R(48), 0x19A4C116 );
    P( H, A, B, C, D, E, F, G, R(49), 0x1E376C08 );
    P( G, H, A, B, C, D, E, F, R(50), 0x2748774C );
    P( F, G, H, A, B, C, D, E, R(51), 0x34B0BCB5 );
    P( E, F, G, H, A, B, C, D, R(52), 0x391C0CB3 );
    P( D, E, F, G, H, A, B, C, R(53), 0x4ED8AA4A );
    P( C, D, E, F, G, H, A, B, R(54), 0x5B9CCA4F );
    P( B, C, D, E, F, G, H, A, R(55), 0x682E6FF3 );
    P( A, B, C, D, E, F, G, H, R(56), 0x748F82EE );
    P( H, A, B, C, D, E, F, G, R(57), 0x78A5636F );
    P( G, H, A, B, C, D, E, F, R(58), 0x84C87814 );
    P( F, G, H, A, B, C, D, E, R(59), 0x8CC70208 );
    P( E, F, G, H, A, B, C, D, R(60), 0x90BEFFFA );
    P( D, E, F, G, H, A, B, C, R(61), 0xA4506CEB );
    P( C, D, E, F, G, H, A, B, R(62), 0xBEF9A3F7 );
    P( B, C, D, E, F, G, H, A, R(63), 0xC67178F2 );
    ctx->state[0] += A;
    ctx->state[1] += B;
    ctx->state[2] += C;
    ctx->state[3] += D;
    ctx->state[4] += E;
    ctx->state[5] += F;
    ctx->state[6] += G;
    ctx->state[7] += H;
}
void CRYPT_SHA256Update( void* context, FX_LPCBYTE input, FX_DWORD length )
{
    sha256_context *ctx = (sha256_context *)context;
    FX_DWORD left, fill;
    if( ! length ) {
        return;
    }
    left = ctx->total[0] & 0x3F;
    fill = 64 - left;
    ctx->total[0] += length;
    ctx->total[0] &= 0xFFFFFFFF;
    if( ctx->total[0] < length ) {
        ctx->total[1]++;
    }
    if( left && length >= fill ) {
        FXSYS_memcpy32( (void *) (ctx->buffer + left),
                        (void *) input, fill );
        sha256_process( ctx, ctx->buffer );
        length -= fill;
        input  += fill;
        left = 0;
    }
    while( length >= 64 ) {
        sha256_process( ctx, input );
        length -= 64;
        input  += 64;
    }
    if( length ) {
        FXSYS_memcpy32( (void *) (ctx->buffer + left),
                        (void *) input, length );
    }
}
static const FX_BYTE sha256_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_SHA256Finish( FX_LPVOID context, FX_BYTE digest[32] )
{
    sha256_context *ctx = (sha256_context *)context;
    FX_DWORD last, padn;
    FX_DWORD high, low;
    FX_BYTE msglen[8];
    high = ( ctx->total[0] >> 29 )
           | ( ctx->total[1] <<  3 );
    low  = ( ctx->total[0] <<  3 );
    PUT_FX_DWORD( high, msglen, 0 );
    PUT_FX_DWORD( low,  msglen, 4 );
    last = ctx->total[0] & 0x3F;
    padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
    CRYPT_SHA256Update( ctx, sha256_padding, padn );
    CRYPT_SHA256Update( 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 );
    PUT_FX_DWORD( ctx->state[4], digest, 16 );
    PUT_FX_DWORD( ctx->state[5], digest, 20 );
    PUT_FX_DWORD( ctx->state[6], digest, 24 );
    PUT_FX_DWORD( ctx->state[7], digest, 28 );
}
void CRYPT_SHA256Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[32])
{
    sha256_context ctx;
    CRYPT_SHA256Start(&ctx);
    CRYPT_SHA256Update(&ctx, data, size);
    CRYPT_SHA256Finish(&ctx, digest);
}
typedef struct {
    FX_UINT64	total[2];
    FX_UINT64	state[8];
    FX_BYTE		buffer[128];
} sha384_context;
FX_UINT64 FX_ato64i(FX_LPCSTR str)
{
    FXSYS_assert(str != NULL);
    FX_UINT64 ret = 0;
    int len = (int)FXSYS_strlen(str);
    len = len > 16 ? 16 : len;
    for (int i = 0; i < len; ++i) {
        if (i) {
            ret <<= 4;
        }
        if (str[i] >= '0' && str[i] <= '9') {
            ret |= (str[i] - '0') & 0xFF;
        } else if (str[i] >= 'a' && str[i] <= 'f') {
            ret |= (str[i] - 'a' + 10) & 0xFF;
        } else if (str[i] >= 'A' && str[i] <= 'F') {
            ret |= (str[i] - 'A' + 10) & 0xFF;
        } else {
            FXSYS_assert(FALSE);
        }
    }
    return ret;
}
void CRYPT_SHA384Start(FX_LPVOID context)
{
    if (context == NULL) {
        return;
    }
    sha384_context *ctx = (sha384_context *)context;
    FXSYS_memset32(ctx, 0, sizeof(sha384_context));
    ctx->state[0] = FX_ato64i("cbbb9d5dc1059ed8");
    ctx->state[1] = FX_ato64i("629a292a367cd507");
    ctx->state[2] = FX_ato64i("9159015a3070dd17");
    ctx->state[3] = FX_ato64i("152fecd8f70e5939");
    ctx->state[4] = FX_ato64i("67332667ffc00b31");
    ctx->state[5] = FX_ato64i("8eb44a8768581511");
    ctx->state[6] = FX_ato64i("db0c2e0d64f98fa7");
    ctx->state[7] = FX_ato64i("47b5481dbefa4fa4");
}
#define SHA384_F0(x,y,z) ((x & y) | (z & (x | y)))
#define SHA384_F1(x,y,z) (z ^ (x & (y ^ z)))
#define SHA384_SHR(x,n) (x >> n)
#define SHA384_ROTR(x,n) (SHA384_SHR(x, n) | x << (64 - n))
#define SHA384_S0(x) (SHA384_ROTR(x, 1) ^ SHA384_ROTR(x, 8) ^  SHA384_SHR(x, 7))
#define SHA384_S1(x) (SHA384_ROTR(x,19) ^ SHA384_ROTR(x, 61) ^  SHA384_SHR(x, 6))
#define SHA384_S2(x) (SHA384_ROTR(x, 28) ^ SHA384_ROTR(x, 34) ^ SHA384_ROTR(x, 39))
#define SHA384_S3(x) (SHA384_ROTR(x, 14) ^ SHA384_ROTR(x,18) ^ SHA384_ROTR(x, 41))
#define SHA384_P(a,b,c,d,e,f,g,h,x,K)							\
    {																\
        temp1 = h + SHA384_S3(e) + SHA384_F1(e,f,g) + K + x;		\
        temp2 = SHA384_S2(a) + SHA384_F0(a,b,c);					\
        d += temp1; h = temp1 + temp2;								\
    }
static const FX_BYTE sha384_padding[128] = {
    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,
    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, 0,
};
#define SHA384_R(t) (W[t] = SHA384_S1(W[t -  2]) + W[t -  7] + SHA384_S0(W[t - 15]) + W[t - 16])
static FX_LPCSTR constants[] = {
    "428a2f98d728ae22",
    "7137449123ef65cd",
    "b5c0fbcfec4d3b2f",
    "e9b5dba58189dbbc",
    "3956c25bf348b538",
    "59f111f1b605d019",
    "923f82a4af194f9b",
    "ab1c5ed5da6d8118",
    "d807aa98a3030242",
    "12835b0145706fbe",
    "243185be4ee4b28c",
    "550c7dc3d5ffb4e2",
    "72be5d74f27b896f",
    "80deb1fe3b1696b1",
    "9bdc06a725c71235",
    "c19bf174cf692694",
    "e49b69c19ef14ad2",
    "efbe4786384f25e3",
    "0fc19dc68b8cd5b5",
    "240ca1cc77ac9c65",
    "2de92c6f592b0275",
    "4a7484aa6ea6e483",
    "5cb0a9dcbd41fbd4",
    "76f988da831153b5",
    "983e5152ee66dfab",
    "a831c66d2db43210",
    "b00327c898fb213f",
    "bf597fc7beef0ee4",
    "c6e00bf33da88fc2",
    "d5a79147930aa725",
    "06ca6351e003826f",
    "142929670a0e6e70",
    "27b70a8546d22ffc",
    "2e1b21385c26c926",
    "4d2c6dfc5ac42aed",
    "53380d139d95b3df",
    "650a73548baf63de",
    "766a0abb3c77b2a8",
    "81c2c92e47edaee6",
    "92722c851482353b",
    "a2bfe8a14cf10364",
    "a81a664bbc423001",
    "c24b8b70d0f89791",
    "c76c51a30654be30",
    "d192e819d6ef5218",
    "d69906245565a910",
    "f40e35855771202a",
    "106aa07032bbd1b8",
    "19a4c116b8d2d0c8",
    "1e376c085141ab53",
    "2748774cdf8eeb99",
    "34b0bcb5e19b48a8",
    "391c0cb3c5c95a63",
    "4ed8aa4ae3418acb",
    "5b9cca4f7763e373",
    "682e6ff3d6b2b8a3",
    "748f82ee5defb2fc",
    "78a5636f43172f60",
    "84c87814a1f0ab72",
    "8cc702081a6439ec",
    "90befffa23631e28",
    "a4506cebde82bde9",
    "bef9a3f7b2c67915",
    "c67178f2e372532b",
    "ca273eceea26619c",
    "d186b8c721c0c207",
    "eada7dd6cde0eb1e",
    "f57d4f7fee6ed178",
    "06f067aa72176fba",
    "0a637dc5a2c898a6",
    "113f9804bef90dae",
    "1b710b35131c471b",
    "28db77f523047d84",
    "32caab7b40c72493",
    "3c9ebe0a15c9bebc",
    "431d67c49c100d4c",
    "4cc5d4becb3e42b6",
    "597f299cfc657e2a",
    "5fcb6fab3ad6faec",
    "6c44198c4a475817",
};
#define GET_FX_64WORD(n,b,i)                       \
    {                                               \
        (n) = ( (FX_UINT64) (b)[(i)    ] << 56 )       \
              | ( (FX_UINT64) (b)[(i) + 1] << 48 )       \
              | ( (FX_UINT64) (b)[(i) + 2] << 40 )       \
              | ( (FX_UINT64) (b)[(i) + 3] << 32 )      \
              | ( (FX_UINT64) (b)[(i) + 4] << 24 )       \
              | ( (FX_UINT64) (b)[(i) + 5] << 16 )       \
              | ( (FX_UINT64) (b)[(i) + 6] <<  8 )       \
              | ( (FX_UINT64) (b)[(i) + 7]       );      \
    }
#define PUT_FX_64DWORD(n,b,i)                       \
    {                                               \
        (b)[(i)    ] = (FX_BYTE) ( (n) >> 56 );       \
        (b)[(i) + 1] = (FX_BYTE) ( (n) >> 48 );       \
        (b)[(i) + 2] = (FX_BYTE) ( (n) >> 40 );       \
        (b)[(i) + 3] = (FX_BYTE) ( (n) >> 32 );       \
        (b)[(i) + 4] = (FX_BYTE) ( (n) >> 24 );       \
        (b)[(i) + 5] = (FX_BYTE) ( (n) >> 16 );       \
        (b)[(i) + 6] = (FX_BYTE) ( (n) >>  8 );       \
        (b)[(i) + 7] = (FX_BYTE) ( (n) );       \
    }
static void sha384_process( sha384_context *ctx, const FX_BYTE data[128] )
{
    FX_UINT64 temp1, temp2;
    FX_UINT64 A, B, C, D, E, F, G, H;
    FX_UINT64 W[80];
    GET_FX_64WORD(W[0], data, 0);
    GET_FX_64WORD(W[1], data, 8);
    GET_FX_64WORD(W[2], data, 16);
    GET_FX_64WORD(W[3], data, 24);
    GET_FX_64WORD(W[4], data, 32);
    GET_FX_64WORD(W[5], data, 40);
    GET_FX_64WORD(W[6], data, 48);
    GET_FX_64WORD(W[7], data, 56);
    GET_FX_64WORD(W[8], data, 64);
    GET_FX_64WORD(W[9], data, 72);
    GET_FX_64WORD(W[10], data, 80);
    GET_FX_64WORD(W[11], data, 88);
    GET_FX_64WORD(W[12], data, 96);
    GET_FX_64WORD(W[13], data, 104);
    GET_FX_64WORD(W[14], data, 112);
    GET_FX_64WORD(W[15], data, 120);
    A = ctx->state[0];
    B = ctx->state[1];
    C = ctx->state[2];
    D = ctx->state[3];
    E = ctx->state[4];
    F = ctx->state[5];
    G = ctx->state[6];
    H = ctx->state[7];
    for (int i = 0; i < 10; ++i) {
        FX_UINT64 temp[8];
        if (i < 2) {
            temp[0] = W[i * 8];
            temp[1] = W[i * 8 + 1];
            temp[2] = W[i * 8 + 2];
            temp[3] = W[i * 8 + 3];
            temp[4] = W[i * 8 + 4];
            temp[5] = W[i * 8 + 5];
            temp[6] = W[i * 8 + 6];
            temp[7] = W[i * 8 + 7];
        } else {
            temp[0] = SHA384_R(i * 8);
            temp[1] = SHA384_R(i * 8 + 1);
            temp[2] = SHA384_R(i * 8 + 2);
            temp[3] = SHA384_R(i * 8 + 3);
            temp[4] = SHA384_R(i * 8 + 4);
            temp[5] = SHA384_R(i * 8 + 5);
            temp[6] = SHA384_R(i * 8 + 6);
            temp[7] = SHA384_R(i * 8 + 7);
        }
        SHA384_P( A, B, C, D, E, F, G, H, temp[ 0], FX_ato64i(constants[i * 8    ]) );
        SHA384_P( H, A, B, C, D, E, F, G, temp[ 1], FX_ato64i(constants[i * 8 + 1]) );
        SHA384_P( G, H, A, B, C, D, E, F, temp[ 2], FX_ato64i(constants[i * 8 + 2]) );
        SHA384_P( F, G, H, A, B, C, D, E, temp[ 3], FX_ato64i(constants[i * 8 + 3]) );
        SHA384_P( E, F, G, H, A, B, C, D, temp[ 4], FX_ato64i(constants[i * 8 + 4]) );
        SHA384_P( D, E, F, G, H, A, B, C, temp[ 5], FX_ato64i(constants[i * 8 + 5]) );
        SHA384_P( C, D, E, F, G, H, A, B, temp[ 6], FX_ato64i(constants[i * 8 + 6]) );
        SHA384_P( B, C, D, E, F, G, H, A, temp[ 7], FX_ato64i(constants[i * 8 + 7]) );
    }
    ctx->state[0] += A;
    ctx->state[1] += B;
    ctx->state[2] += C;
    ctx->state[3] += D;
    ctx->state[4] += E;
    ctx->state[5] += F;
    ctx->state[6] += G;
    ctx->state[7] += H;
}
void CRYPT_SHA384Update(FX_LPVOID context, FX_LPCBYTE input, FX_DWORD length)
{
    sha384_context *ctx = (sha384_context *)context;
    FX_DWORD left, fill;
    if( ! length ) {
        return;
    }
    left = (FX_DWORD)ctx->total[0] & 0x7F;
    fill = 128 - left;
    ctx->total[0] += length;
    if( ctx->total[0] < length ) {
        ctx->total[1]++;
    }
    if( left && length >= fill ) {
        FXSYS_memcpy32( (void *) (ctx->buffer + left),
                        (void *) input, fill );
        sha384_process( ctx, ctx->buffer );
        length -= fill;
        input  += fill;
        left = 0;
    }
    while( length >= 128 ) {
        sha384_process( ctx, input );
        length -= 128;
        input  += 128;
    }
    if( length ) {
        FXSYS_memcpy32( (void *) (ctx->buffer + left),
                        (void *) input, length );
    }
}
void CRYPT_SHA384Finish(FX_LPVOID context, FX_BYTE digest[48])
{
    sha384_context *ctx = (sha384_context *)context;
    FX_DWORD last, padn;
    FX_BYTE msglen[16];
    FXSYS_memset32(msglen, 0, 16);
    FX_UINT64 high, low;
    high = ( ctx->total[0] >> 29 )
           | ( ctx->total[1] <<  3 );
    low  = ( ctx->total[0] <<  3 );
    PUT_FX_64DWORD( high, msglen, 0 );
    PUT_FX_64DWORD( low,  msglen, 8 );
    last = (FX_DWORD)ctx->total[0] & 0x7F;
    padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );
    CRYPT_SHA384Update( ctx, sha384_padding, padn );
    CRYPT_SHA384Update( ctx, msglen, 16 );
    PUT_FX_64DWORD(ctx->state[0], digest, 0);
    PUT_FX_64DWORD(ctx->state[1], digest, 8);
    PUT_FX_64DWORD(ctx->state[2], digest, 16);
    PUT_FX_64DWORD(ctx->state[3], digest, 24);
    PUT_FX_64DWORD(ctx->state[4], digest, 32);
    PUT_FX_64DWORD(ctx->state[5], digest, 40);
}
void CRYPT_SHA384Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[64])
{
    sha384_context context;
    CRYPT_SHA384Start(&context);
    CRYPT_SHA384Update(&context, data, size);
    CRYPT_SHA384Finish(&context, digest);
}
void CRYPT_SHA512Start(FX_LPVOID context)
{
    if (context == NULL) {
        return;
    }
    sha384_context *ctx = (sha384_context *)context;
    FXSYS_memset32(ctx, 0, sizeof(sha384_context));
    ctx->state[0] = FX_ato64i("6a09e667f3bcc908");
    ctx->state[1] = FX_ato64i("bb67ae8584caa73b");
    ctx->state[2] = FX_ato64i("3c6ef372fe94f82b");
    ctx->state[3] = FX_ato64i("a54ff53a5f1d36f1");
    ctx->state[4] = FX_ato64i("510e527fade682d1");
    ctx->state[5] = FX_ato64i("9b05688c2b3e6c1f");
    ctx->state[6] = FX_ato64i("1f83d9abfb41bd6b");
    ctx->state[7] = FX_ato64i("5be0cd19137e2179");
}
void CRYPT_SHA512Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size)
{
    CRYPT_SHA384Update(context, data, size);
}
void CRYPT_SHA512Finish(FX_LPVOID context, FX_BYTE digest[64])
{
    sha384_context *ctx = (sha384_context *)context;
    FX_DWORD last, padn;
    FX_BYTE msglen[16];
    FXSYS_memset32(msglen, 0, 16);
    FX_UINT64 high, low;
    high = ( ctx->total[0] >> 29 )
           | ( ctx->total[1] <<  3 );
    low  = ( ctx->total[0] <<  3 );
    PUT_FX_64DWORD( high, msglen, 0 );
    PUT_FX_64DWORD( low,  msglen, 8 );
    last = (FX_DWORD)ctx->total[0] & 0x7F;
    padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );
    CRYPT_SHA512Update( ctx, sha384_padding, padn );
    CRYPT_SHA512Update( ctx, msglen, 16 );
    PUT_FX_64DWORD(ctx->state[0], digest, 0);
    PUT_FX_64DWORD(ctx->state[1], digest, 8);
    PUT_FX_64DWORD(ctx->state[2], digest, 16);
    PUT_FX_64DWORD(ctx->state[3], digest, 24);
    PUT_FX_64DWORD(ctx->state[4], digest, 32);
    PUT_FX_64DWORD(ctx->state[5], digest, 40);
    PUT_FX_64DWORD(ctx->state[6], digest, 48);
    PUT_FX_64DWORD(ctx->state[7], digest, 56);
}
void CRYPT_SHA512Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[64])
{
    sha384_context context;
    CRYPT_SHA512Start(&context);
    CRYPT_SHA512Update(&context, data, size);
    CRYPT_SHA512Finish(&context, digest);
}
#ifdef __cplusplus
};
#endif
