鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

使用示例

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <hmac_sha1.h>

// Generates pseudo-random data
static void rand_buffer(unsigned char *buf, const long buffer_size)
{
    long i;
    for (i = 0; i < buffer_size; i++) {
        buf[i] = rand();
    }
}

int main(int argc, char *argv[]) {
    static const int MAX_KEY_SIZE = 128;
    uint32_t fail = 0;
    uint8_t key[MAX_KEY_SIZE];
    uint8_t native_digest[TEST_BUFS][SHA1_DIGEST_SIZE];
    uint32_t n_left = TEST_BUFS;
    uint32_t i = 0;
    uint8_t *bufs[TEST_BUFS] = { NULL };
    for (i = 0; i < TEST_BUFS; i++) {
        bufs[i] = (uint8_t *)malloc(sizeof(uint8_t) * TEST_LEN);
        if (bufs[i] == NULL) {
            printf("malloc failed test aborted.\n");
            fail = 1;
            goto end;
        }
        rand_buffer(bufs[i], TEST_LEN);
    }
    int keylen = rand() % MAX_KEY_SIZE + 1;
    rand_buffer(key, keylen);

    for (i = 0; i < TEST_BUFS; ) {
        uint32_t n_enque = 0;
        sha1_hmac_ctx_t  hmac_ctxs[3];
        sha1_hmac_ctx_t *hmac_ctx_ptrs[3] = { NULL };
        sha1_hmac_key_data_t kds[3];
        uint8_t *msgs[3] = { NULL };
        uint64_t lens[3] = { 0 };
        for (int j = 0; j < 3 && n_left > 0; j++) {
            hmac_sha1_key_data(key, keylen, &kds[j]);
            hmac_sha1_init(&hmac_ctxs[j], &kds[j]);
            hmac_ctx_ptrs[j] = &hmac_ctxs[j];
            msgs[j] = bufs[i];
            lens[j] = TEST_LEN;
            n_left--;
            n_enque++;
            i++;
        }
    
        if (n_enque == 3) {
            hmac_sha1_update_x3(hmac_ctx_ptrs, msgs, lens);
        } else if (n_enque == 2) {
            hmac_sha1_update_x2(hmac_ctx_ptrs, msgs, lens);
        } else if (n_enque == 1){
            hmac_sha1_update(hmac_ctx_ptrs[0], msgs[0], lens[0]);
        }
        for (int j = 0; j < n_enque; j++) {
            hmac_sha1_final(hmac_ctx_ptrs[j], native_digest[i - n_enque + j]);
        }
    }
    if (fail == 0) {
        printf("PASSED\n");
    }
end:
    for (i = 0; i < TEST_BUFS; i++) {
        if (bufs[i] != NULL) {
            free(bufs[i]);
            bufs[i] = NULL;
        }
    }
    return fail;
}