403Webshell
Server IP : 88.99.149.37  /  Your IP : 216.73.216.141
Web Server : nginx/1.31.2
System : Linux server-88-99-149-37 6.12.0-124.56.5.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 15 06:12:08 EDT 2026 x86_64
User : muralimurth ( 1015)
PHP Version : 8.4.23
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/share/doc/libsodium-devel/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/share/doc/libsodium-devel/kdf_hkdf2.c
#define TEST_NAME "kdf_hkdf2"
#include "cmptest.h"

static void
tv_kdf_hkdf_incremental(void)
{
    unsigned char *master_key;
    size_t         master_key_len = 66;
    unsigned char *salt;
    size_t         salt_len = 77;
    char          *context;
    size_t         context_len = 88;
    unsigned char  prk_oneshot[crypto_kdf_hkdf_sha512_KEYBYTES];
    unsigned char  prk_incremental[crypto_kdf_hkdf_sha512_KEYBYTES];
    unsigned char  prk256_oneshot[crypto_kdf_hkdf_sha256_KEYBYTES];
    unsigned char  prk256_incremental[crypto_kdf_hkdf_sha256_KEYBYTES];
    unsigned char  out_oneshot[99];
    unsigned char  out_incremental[99];
    char           hex[99 * 2 + 1];
    size_t         i;

    master_key = (unsigned char *) sodium_malloc(master_key_len);
    salt = (unsigned char *) sodium_malloc(salt_len);
    context = (char *) sodium_malloc(context_len);
    for (i = 0; i < master_key_len; i++) {
        master_key[i] = (unsigned char) i;
    }
    for (i = 0; i < salt_len; i++) {
        salt[i] = (unsigned char) ~i;
    }
    for (i = 0; i < context_len; i++) {
        context[i] = (unsigned char) (i + 111);
    }

    crypto_kdf_hkdf_sha512_extract(prk_oneshot, salt, salt_len,
                                   master_key, master_key_len);

    {
        crypto_kdf_hkdf_sha512_state state;

        crypto_kdf_hkdf_sha512_extract_init(&state, salt, salt_len);
        crypto_kdf_hkdf_sha512_extract_update(&state, master_key,
                                              master_key_len);
        crypto_kdf_hkdf_sha512_extract_final(&state, prk_incremental);
    }
    assert(memcmp(prk_oneshot, prk_incremental, sizeof prk_oneshot) == 0);
    printf("sha512 incremental (single update): ok\n");

    {
        crypto_kdf_hkdf_sha512_state state;

        crypto_kdf_hkdf_sha512_extract_init(&state, salt, salt_len);
        for (i = 0; i < master_key_len; i++) {
            crypto_kdf_hkdf_sha512_extract_update(&state, &master_key[i], 1);
        }
        crypto_kdf_hkdf_sha512_extract_final(&state, prk_incremental);
    }
    assert(memcmp(prk_oneshot, prk_incremental, sizeof prk_oneshot) == 0);
    printf("sha512 incremental (byte-by-byte): ok\n");

    {
        crypto_kdf_hkdf_sha512_state state;
        unsigned char prk_null_salt_oneshot[crypto_kdf_hkdf_sha512_KEYBYTES];
        unsigned char prk_null_salt_incr[crypto_kdf_hkdf_sha512_KEYBYTES];

        crypto_kdf_hkdf_sha512_extract(prk_null_salt_oneshot, NULL, 0,
                                       master_key, master_key_len);
        crypto_kdf_hkdf_sha512_extract_init(&state, NULL, 0);
        crypto_kdf_hkdf_sha512_extract_update(&state, master_key,
                                              master_key_len);
        crypto_kdf_hkdf_sha512_extract_final(&state, prk_null_salt_incr);
        assert(memcmp(prk_null_salt_oneshot, prk_null_salt_incr,
                      sizeof prk_null_salt_oneshot) == 0);
    }
    printf("sha512 incremental (null salt): ok\n");

    crypto_kdf_hkdf_sha512_expand(out_oneshot, 99, context, context_len,
                                  prk_oneshot);
    crypto_kdf_hkdf_sha512_expand(out_incremental, 99, context, context_len,
                                  prk_incremental);
    assert(memcmp(out_oneshot, out_incremental, 99) == 0);
    printf("sha512 expand consistency: ok\n");

    sodium_bin2hex(hex, sizeof hex, prk_oneshot, sizeof prk_oneshot);
    printf("sha512 prk: %s\n", hex);

    crypto_kdf_hkdf_sha256_extract(prk256_oneshot, salt, salt_len,
                                   master_key, master_key_len);

    {
        crypto_kdf_hkdf_sha256_state state;
        size_t half = master_key_len / 2;

        crypto_kdf_hkdf_sha256_extract_init(&state, salt, salt_len);
        crypto_kdf_hkdf_sha256_extract_update(&state, master_key, half);
        crypto_kdf_hkdf_sha256_extract_update(&state, master_key + half,
                                              master_key_len - half);
        crypto_kdf_hkdf_sha256_extract_final(&state, prk256_incremental);
    }
    assert(memcmp(prk256_oneshot, prk256_incremental,
                  sizeof prk256_oneshot) == 0);
    printf("sha256 incremental (two chunks): ok\n");

    {
        crypto_kdf_hkdf_sha256_state state;
        unsigned char prk_null_oneshot[crypto_kdf_hkdf_sha256_KEYBYTES];
        unsigned char prk_null_incr[crypto_kdf_hkdf_sha256_KEYBYTES];

        crypto_kdf_hkdf_sha256_extract(prk_null_oneshot, NULL, 0,
                                       master_key, master_key_len);
        crypto_kdf_hkdf_sha256_extract_init(&state, NULL, 0);
        crypto_kdf_hkdf_sha256_extract_update(&state, master_key,
                                              master_key_len);
        crypto_kdf_hkdf_sha256_extract_final(&state, prk_null_incr);
        assert(memcmp(prk_null_oneshot, prk_null_incr,
                      sizeof prk_null_oneshot) == 0);
    }
    printf("sha256 incremental (null salt): ok\n");

    sodium_bin2hex(hex, sizeof hex, prk256_oneshot, sizeof prk256_oneshot);
    printf("sha256 prk: %s\n", hex);

    sodium_free(context);
    sodium_free(salt);
    sodium_free(master_key);
}

int
main(void)
{
    tv_kdf_hkdf_incremental();

    return 0;
}

Youez - 2016 - github.com/yon3zu
LinuXploit