1
2#define TEST_NAME "auth"
3#include "cmptest.h"
4
5/* "Test Case 2" from RFC 4231 */
6static unsigned char key[32] = "Jefe";
7static unsigned char c[]     = "what do ya want for nothing?";
8
9/* Hacker manifesto */
10static unsigned char key2[] =
11    "Another one got caught today, it's all over the papers. \"Teenager "
12    "Arrested in Computer Crime Scandal\", \"Hacker Arrested after Bank "
13    "Tampering\"... Damn kids. They're all alike.";
14
15static unsigned char a[crypto_auth_BYTES];
16static unsigned char a2[crypto_auth_hmacsha512_BYTES];
17
18int
19main(void)
20{
21    crypto_auth_hmacsha512_state st;
22    crypto_auth_hmacsha256_state st256;
23    size_t                       i;
24
25    assert(crypto_auth_hmacsha512_statebytes() ==
26           sizeof(crypto_auth_hmacsha512_state));
27    crypto_auth(a, c, sizeof c - 1U, key);
28    for (i = 0; i < sizeof a; ++i) {
29        printf(",0x%02x", (unsigned int) a[i]);
30        if (i % 8 == 7)
31            printf("\n");
32    }
33    printf("\n");
34
35    crypto_auth_hmacsha512_init(&st, key, sizeof key);
36    crypto_auth_hmacsha512_update(&st, c, 1U);
37    crypto_auth_hmacsha512_update(&st, c, sizeof c - 2U);
38    crypto_auth_hmacsha512_final(&st, a2);
39    for (i = 0; i < sizeof a2; ++i) {
40        printf(",0x%02x", (unsigned int) a2[i]);
41        if (i % 8 == 7)
42            printf("\n");
43    }
44    printf("\n");
45
46    crypto_auth_hmacsha512_init(&st, key2, sizeof key2);
47    crypto_auth_hmacsha512_update(&st, c, 1U);
48    crypto_auth_hmacsha512_update(&st, c, sizeof c - 2U);
49    crypto_auth_hmacsha512_final(&st, a2);
50    for (i = 0; i < sizeof a2; ++i) {
51        printf(",0x%02x", (unsigned int) a2[i]);
52        if (i % 8 == 7)
53            printf("\n");
54    }
55
56    memset(a2, 0, sizeof a2);
57    crypto_auth_hmacsha256_init(&st256, key2, sizeof key2);
58    crypto_auth_hmacsha256_update(&st256, NULL, 0U);
59    crypto_auth_hmacsha256_update(&st256, c, 1U);
60    crypto_auth_hmacsha256_update(&st256, c, sizeof c - 2U);
61    crypto_auth_hmacsha256_final(&st256, a2);
62    for (i = 0; i < sizeof a2; ++i) {
63        printf(",0x%02x", (unsigned int) a2[i]);
64        if (i % 8 == 7)
65            printf("\n");
66    }
67
68    assert(crypto_auth_bytes() > 0U);
69    assert(crypto_auth_keybytes() > 0U);
70    assert(strcmp(crypto_auth_primitive(), "hmacsha512256") == 0);
71    assert(crypto_auth_hmacsha256_bytes() > 0U);
72    assert(crypto_auth_hmacsha256_keybytes() > 0U);
73    assert(crypto_auth_hmacsha512_bytes() > 0U);
74    assert(crypto_auth_hmacsha512_keybytes() > 0U);
75    assert(crypto_auth_hmacsha512256_bytes() == crypto_auth_bytes());
76    assert(crypto_auth_hmacsha512256_keybytes() == crypto_auth_keybytes());
77    assert(crypto_auth_hmacsha512256_statebytes() >=
78           crypto_auth_hmacsha512256_keybytes());
79    assert(crypto_auth_hmacsha256_statebytes() ==
80           sizeof(crypto_auth_hmacsha256_state));
81    assert(crypto_auth_hmacsha512_statebytes() ==
82           sizeof(crypto_auth_hmacsha512_state));
83
84    return 0;
85}
86