1/*	$OpenBSD: crypto_test.c,v 1.1 2024/04/25 14:27:29 jsing Exp $	*/
2/*
3 * Copyright (c) 2024 Joel Sing <jsing@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <stdint.h>
19#include <stdio.h>
20
21#include "crypto_internal.h"
22
23static int
24test_ct_u8(void)
25{
26	uint8_t i, j, mask;
27	int failed = 1;
28
29	i = 0;
30
31	do {
32		if ((i != 0) != crypto_ct_ne_zero_u8(i)) {
33			fprintf(stderr, "FAIL: crypto_ct_ne_zero_u8(%d) = %d, "
34			    "want %d\n", i, crypto_ct_ne_zero_u8(i), i != 0);
35			goto failure;
36		}
37		mask = (i != 0) ? 0xff : 0x00;
38		if (mask != crypto_ct_ne_zero_mask_u8(i)) {
39			fprintf(stderr, "FAIL: crypto_ct_ne_zero_mask_u8(%d) = %x, "
40			    "want %x\n", i, crypto_ct_ne_zero_mask_u8(i), mask);
41			goto failure;
42		}
43		if ((i == 0) != crypto_ct_eq_zero_u8(i)) {
44			fprintf(stderr, "FAIL: crypto_ct_eq_zero_u8(%d) = %d, "
45			    "want %d\n", i, crypto_ct_ne_zero_u8(i), i != 0);
46			goto failure;
47		}
48		mask = (i == 0) ? 0xff : 0x00;
49		if (mask != crypto_ct_eq_zero_mask_u8(i)) {
50			fprintf(stderr, "FAIL: crypto_ct_eq_zero_mask_u8(%d) = %x, "
51			    "want %x\n", i, crypto_ct_ne_zero_mask_u8(i), mask);
52			goto failure;
53		}
54
55		j = 0;
56
57		do {
58			if ((i != j) != crypto_ct_ne_u8(i, j)) {
59				fprintf(stderr, "FAIL: crypto_ct_ne_u8(%d, %d) = %d, "
60				    "want %d\n", i, j, crypto_ct_ne_u8(i, j), i != j);
61				goto failure;
62			}
63			mask = (i != j) ? 0xff : 0x00;
64			if (mask != crypto_ct_ne_mask_u8(i, j)) {
65				fprintf(stderr, "FAIL: crypto_ct_ne_mask_u8(%d, %d) = %x, "
66				    "want %x\n", i, j, crypto_ct_ne_mask_u8(i, j), mask);
67				goto failure;
68			}
69			if ((i == j) != crypto_ct_eq_u8(i, j)) {
70				fprintf(stderr, "FAIL: crypto_ct_eq_u8(%d, %d) = %d, "
71				    "want %d\n", i, j, crypto_ct_eq_u8(i, j), i != j);
72				goto failure;
73			}
74			mask = (i == j) ? 0xff : 0x00;
75			if (mask != crypto_ct_eq_mask_u8(i, j)) {
76				fprintf(stderr, "FAIL: crypto_ct_eq_mask_u8(%d, %d) = %x, "
77				    "want %x\n", i, j, crypto_ct_eq_mask_u8(i, j), mask);
78				goto failure;
79			}
80		} while (++j != 0);
81	} while (++i != 0);
82
83	failed = 0;
84
85 failure:
86	return failed;
87}
88
89int
90main(int argc, char **argv)
91{
92	int failed = 0;
93
94	failed |= test_ct_u8();
95
96	return failed;
97}
98