← 首页 uint8_t inner_block[4][16] = { 0 };
    uint8_t inner_block[4][16] = { 0 };
    uint32_t tmp = 0x61707865;

    memcpy_(inner_block[0], &tmp, 4);
    tmp = 0x3320646e;
    memcpy_(inner_block[0]+4, &tmp, 4);
    tmp = 0x79622d32;
    memcpy_(inner_block[0]+8, &tmp, 4);
    tmp = 0x6b206574;
    memcpy_(inner_block[0]+12, &tmp, 4);

    str_reverse((unsigned char *)inner_block[0], 4);
    str_reverse((unsigned char*)inner_block[0]+4, 4);
    str_reverse((unsigned char*)inner_block[0]+8, 4);
    str_reverse((unsigned char*)inner_block[0]+12, 4);
//chacha20   
//built inner block
    inner_block[0] = big_little_swap32(0x61707865);
    inner_block[1] = big_little_swap32(0x3320646e);
    inner_block[2] = big_little_swap32(0x79622d32);
    inner_block[3] = big_little_swap32(0x6b206574);

    for (int i = 0; i < 8; i++)
    {
        memcpy_((void*)&inner_block[i + 4], (void*)&key1[i * 4], 4);
        inner_block[i + 4] = big_little_swap32(inner_block[i + 4]);
    }

    inner_block[12] = big_little_swap32(block_count);

    for (int i = 0; i < 3; i++)
    {
        memcpy_((void*)&inner_block[i + 13], (void*)&nonce[i * 4], 4);
        inner_block[i + 13] = big_little_swap32(inner_block[i + 13]);
    }

    memcpy_(initial_block, inner_block, 16 * 4);

    //20 rounds
    for (int i = 0; i < 16; i++)
    {
        inner_block[i] = big_little_swap32(inner_block[i]);
        initial_block[i] = big_little_swap32(initial_block[i]);
    }

    //20 rounds
    for (int i = 0; i < 10; i++)
    {
        Quarter_Round(&inner_block[0], &inner_block[4], &inner_block[8], &inner_block[12]);
        Quarter_Round(&inner_block[1], &inner_block[5], &inner_block[9], &inner_block[13]);
        Quarter_Round(&inner_block[2], &inner_block[6], &inner_block[10], &inner_block[14]);
        Quarter_Round(&inner_block[3], &inner_block[7], &inner_block[11], &inner_block[15]);
        Quarter_Round(&inner_block[0], &inner_block[5], &inner_block[10], &inner_block[15]);
        Quarter_Round(&inner_block[1], &inner_block[6], &inner_block[11], &inner_block[12]);
        Quarter_Round(&inner_block[2], &inner_block[7], &inner_block[8], &inner_block[13]);
        Quarter_Round(&inner_block[3], &inner_block[4], &inner_block[9], &inner_block[14]);
    }

    for (int i = 0; i < 16; i++)
    {
        inner_block[i] += initial_block[i];
    }

    for (int i = 1; i <= 16; i++)
    {
        printf("%08x  ", inner_block[i - 1]);
        if (i % 4 == 0)
            printf("\n");
    }