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