// 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(void* context)
{
    SHA_State * s = (SHA_State*)context;
    SHA_Core_Init(s->h);
    s->blkused = 0;
    s->lenhi = s->lenlo = 0;
}
void CRYPT_SHA1Update(void* context, const uint8_t* 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_memcpy(s->block + s->blkused, q, len);
        s->blkused += len;
    } else {
        while (s->blkused + len >= 64) {
            FXSYS_memcpy(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_memcpy(s->block, q, len);
        s->blkused = len;
    }
}
void CRYPT_SHA1Finish(void* context, uint8_t 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_memset(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(const uint8_t* data, FX_DWORD size, uint8_t 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];
    uint8_t 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)    ] = (uint8_t) ( (n) >> 24 );       \
        (b)[(i) + 1] = (uint8_t) ( (n) >> 16 );       \
        (b)[(i) + 2] = (uint8_t) ( (n) >>  8 );       \
        (b)[(i) + 3] = (uint8_t) ( (n)       );       \
    }
void CRYPT_SHA256Start( void* 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 uint8_t 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, const uint8_t* 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_memcpy( (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_memcpy( (void *) (ctx->buffer + left),
                        (void *) input, length );
    }
}
static const uint8_t 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( void* context, uint8_t digest[32] )
{
    sha256_context *ctx = (sha256_context *)context;
    FX_DWORD last, padn;
    FX_DWORD high, low;
    uint8_t 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(const uint8_t* data, FX_DWORD size, uint8_t digest[32])
{
    sha256_context ctx;
    CRYPT_SHA256Start(&ctx);
    CRYPT_SHA256Update(&ctx, data, size);
    CRYPT_SHA256Finish(&ctx, digest);
}
typedef struct {
    uint64_t	total[2];
    uint64_t	state[8];
    uint8_t		buffer[128];
} sha384_context;
uint64_t FX_ato64i(const FX_CHAR* str)
{
    FXSYS_assert(str != NULL);
    uint64_t 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(void* context)
{
    if (context == NULL) {
        return;
    }
    sha384_context *ctx = (sha384_context *)context;
    FXSYS_memset(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 uint8_t 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 const FX_CHAR* 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) = ( (uint64_t) (b)[(i)    ] << 56 )       \
              | ( (uint64_t) (b)[(i) + 1] << 48 )       \
              | ( (uint64_t) (b)[(i) + 2] << 40 )       \
              | ( (uint64_t) (b)[(i) + 3] << 32 )      \
              | ( (uint64_t) (b)[(i) + 4] << 24 )       \
              | ( (uint64_t) (b)[(i) + 5] << 16 )       \
              | ( (uint64_t) (b)[(i) + 6] <<  8 )       \
              | ( (uint64_t) (b)[(i) + 7]       );      \
    }
#define PUT_FX_64DWORD(n,b,i)                       \
    {                                               \
        (b)[(i)    ] = (uint8_t) ( (n) >> 56 );       \
        (b)[(i) + 1] = (uint8_t) ( (n) >> 48 );       \
        (b)[(i) + 2] = (uint8_t) ( (n) >> 40 );       \
        (b)[(i) + 3] = (uint8_t) ( (n) >> 32 );       \
        (b)[(i) + 4] = (uint8_t) ( (n) >> 24 );       \
        (b)[(i) + 5] = (uint8_t) ( (n) >> 16 );       \
        (b)[(i) + 6] = (uint8_t) ( (n) >>  8 );       \
        (b)[(i) + 7] = (uint8_t) ( (n) );       \
    }
static void sha384_process( sha384_context *ctx, const uint8_t data[128] )
{
    uint64_t temp1, temp2;
    uint64_t A, B, C, D, E, F, G, H;
    uint64_t 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) {
        uint64_t 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(void* context, const uint8_t* 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_memcpy( (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_memcpy( (void *) (ctx->buffer + left),
                        (void *) input, length );
    }
}
void CRYPT_SHA384Finish(void* context, uint8_t digest[48])
{
    sha384_context *ctx = (sha384_context *)context;
    FX_DWORD last, padn;
    uint8_t msglen[16];
    FXSYS_memset(msglen, 0, 16);
    uint64_t 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(const uint8_t* data, FX_DWORD size, uint8_t digest[64])
{
    sha384_context context;
    CRYPT_SHA384Start(&context);
    CRYPT_SHA384Update(&context, data, size);
    CRYPT_SHA384Finish(&context, digest);
}
void CRYPT_SHA512Start(void* context)
{
    if (context == NULL) {
        return;
    }
    sha384_context *ctx = (sha384_context *)context;
    FXSYS_memset(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(void* context, const uint8_t* data, FX_DWORD size)
{
    CRYPT_SHA384Update(context, data, size);
}
void CRYPT_SHA512Finish(void* context, uint8_t digest[64])
{
    sha384_context *ctx = (sha384_context *)context;
    FX_DWORD last, padn;
    uint8_t msglen[16];
    FXSYS_memset(msglen, 0, 16);
    uint64_t 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(const uint8_t* data, FX_DWORD size, uint8_t digest[64])
{
    sha384_context context;
    CRYPT_SHA512Start(&context);
    CRYPT_SHA512Update(&context, data, size);
    CRYPT_SHA512Finish(&context, digest);
}
#ifdef __cplusplus
};
#endif
