1
2 #define TEST_NAME "misuse"
3 #include "cmptest.h"
4
5 #ifdef HAVE_CATCHABLE_ABRT
6 # include <signal.h>
7
8 static void
sigabrt_handler_15(int sig)9 sigabrt_handler_15(int sig)
10 {
11 (void) sig;
12 exit(0);
13 }
14
15 # ifndef SODIUM_LIBRARY_MINIMAL
16 static void
sigabrt_handler_14(int sig)17 sigabrt_handler_14(int sig)
18 {
19 (void) sig;
20 signal(SIGABRT, sigabrt_handler_15);
21 assert(crypto_box_curve25519xchacha20poly1305_easy
22 (guard_page, guard_page, crypto_stream_xchacha20_MESSAGEBYTES_MAX - 1,
23 guard_page, guard_page, guard_page) == -1);
24 exit(1);
25 }
26
27 static void
sigabrt_handler_13(int sig)28 sigabrt_handler_13(int sig)
29 {
30 (void) sig;
31 signal(SIGABRT, sigabrt_handler_14);
32 assert(crypto_box_curve25519xchacha20poly1305_easy_afternm
33 (guard_page, guard_page, crypto_stream_xchacha20_MESSAGEBYTES_MAX - 1,
34 guard_page, guard_page) == -1);
35 exit(1);
36 }
37 # endif
38
39 static void
sigabrt_handler_12(int sig)40 sigabrt_handler_12(int sig)
41 {
42 (void) sig;
43 # ifdef SODIUM_LIBRARY_MINIMAL
44 signal(SIGABRT, sigabrt_handler_15);
45 # else
46 signal(SIGABRT, sigabrt_handler_13);
47 # endif
48 assert(crypto_pwhash_str_alg((char *) guard_page,
49 "", 0U, 1U, 1U, -1) == -1);
50 exit(1);
51 }
52
53 static void
sigabrt_handler_11(int sig)54 sigabrt_handler_11(int sig)
55 {
56 (void) sig;
57 signal(SIGABRT, sigabrt_handler_12);
58 assert(crypto_box_easy(guard_page, guard_page,
59 crypto_stream_xsalsa20_MESSAGEBYTES_MAX,
60 guard_page, guard_page, guard_page) == -1);
61 exit(1);
62 }
63
64 static void
sigabrt_handler_10(int sig)65 sigabrt_handler_10(int sig)
66 {
67 (void) sig;
68 signal(SIGABRT, sigabrt_handler_11);
69 assert(crypto_box_easy_afternm(guard_page, guard_page,
70 crypto_stream_xsalsa20_MESSAGEBYTES_MAX,
71 guard_page, guard_page) == -1);
72 exit(1);
73 }
74
75 static void
sigabrt_handler_9(int sig)76 sigabrt_handler_9(int sig)
77 {
78 (void) sig;
79 signal(SIGABRT, sigabrt_handler_10);
80 assert(sodium_base642bin(guard_page, 1, (const char *) guard_page, 1,
81 NULL, NULL, NULL, -1) == -1);
82 exit(1);
83 }
84
85 static void
sigabrt_handler_8(int sig)86 sigabrt_handler_8(int sig)
87 {
88 (void) sig;
89 signal(SIGABRT, sigabrt_handler_9);
90 assert(sodium_bin2base64((char *) guard_page, 1, guard_page, 1,
91 sodium_base64_VARIANT_ORIGINAL) == NULL);
92 exit(1);
93 }
94
95 static void
sigabrt_handler_7(int sig)96 sigabrt_handler_7(int sig)
97 {
98 (void) sig;
99 signal(SIGABRT, sigabrt_handler_8);
100 assert(sodium_bin2base64((char *) guard_page, 1,
101 guard_page, 1, -1) == NULL);
102 exit(1);
103 }
104
105 static void
sigabrt_handler_6(int sig)106 sigabrt_handler_6(int sig)
107 {
108 (void) sig;
109 signal(SIGABRT, sigabrt_handler_7);
110 assert(sodium_pad(NULL, guard_page, SIZE_MAX, 16, 1) == -1);
111 exit(1);
112 }
113
114 static void
sigabrt_handler_5(int sig)115 sigabrt_handler_5(int sig)
116 {
117 (void) sig;
118 signal(SIGABRT, sigabrt_handler_6);
119 assert(crypto_aead_xchacha20poly1305_ietf_encrypt(guard_page, NULL, NULL, UINT64_MAX,
120 NULL, 0, NULL,
121 guard_page, guard_page) == -1);
122 exit(1);
123 }
124
125 static void
sigabrt_handler_4(int sig)126 sigabrt_handler_4(int sig)
127 {
128 (void) sig;
129 signal(SIGABRT, sigabrt_handler_5);
130 assert(crypto_aead_chacha20poly1305_ietf_encrypt(guard_page, NULL, NULL, UINT64_MAX,
131 NULL, 0, NULL,
132 guard_page, guard_page) == -1);
133 exit(1);
134 }
135
136 static void
sigabrt_handler_3(int sig)137 sigabrt_handler_3(int sig)
138 {
139 (void) sig;
140 signal(SIGABRT, sigabrt_handler_4);
141 assert(crypto_aead_chacha20poly1305_encrypt(guard_page, NULL, NULL, UINT64_MAX,
142 NULL, 0, NULL,
143 guard_page, guard_page) == -1);
144 exit(1);
145 }
146
147 static void
sigabrt_handler_2(int sig)148 sigabrt_handler_2(int sig)
149 {
150 (void) sig;
151 signal(SIGABRT, sigabrt_handler_3);
152 #if SIZE_MAX > 0x4000000000ULL
153 randombytes_buf_deterministic(guard_page, 0x4000000001ULL, guard_page);
154 #else
155 abort();
156 #endif
157 exit(1);
158 }
159
160 static void
sigabrt_handler_1(int sig)161 sigabrt_handler_1(int sig)
162 {
163 (void) sig;
164 signal(SIGABRT, sigabrt_handler_2);
165 assert(crypto_kx_server_session_keys(NULL, NULL, guard_page, guard_page,
166 guard_page) == -1);
167 exit(1);
168 }
169
170 int
main(void)171 main(void)
172 {
173 signal(SIGABRT, sigabrt_handler_1);
174 assert(crypto_kx_client_session_keys(NULL, NULL, guard_page, guard_page,
175 guard_page) == -1);
176 return 1;
177 }
178 #else
179 int
main(void)180 main(void)
181 {
182 return 0;
183 }
184 #endif
185