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